OSX上的应用程序不能产生超过2048个线程

Jac*_*ark 4 linux macos multithreading rust

我在OSX上有一个Rust应用程序启动大量线程,如下面的代码所示,但是,在查看我的OSX版本允许通过sysctl kern.num_taskthreads命令创建多少个最大线程后,我可以看到它就是kern.num_taskthreads: 2048这解释了为什么我不能在2048和螺纹旋转起来.

我如何才能超越这个硬限制?

let threads = 300000;
let requests = 1;

for _x in 0..threads {
    println!("{}", _x);
    let request_clone = request.clone();

    let handle = thread::spawn(move || {
        for _y in 0..requests {
            request_clone.lock().unwrap().push((request::Request::new(request::Request::create_request())));
        }
    });

    child_threads.push(handle);
}
Run Code Online (Sandbox Code Playgroud)

She*_*ter 7

在开始之前,我建议您阅读有关C10K问题的内容.当你达到这个规模时,你需要记住更多的事情.

话虽这么说,我建议看看mio ......

Rust的轻量级IO库,专注于在OS抽象上添加尽可能少的开销.

具体来说,mio提供了一个事件循环,它允许您处理大量连接而不会产生线程.不幸的是,我不知道当前支持mio的HTTP库.你可以创建一个并成为Rust社区的英雄!