linux – OSX上的应用程序无法生成超过2048个线程

我在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);
}

解决方法

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

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

a lightweight IO library for Rust with a focus on adding as little overhead as possible over the OS abstractions.

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

相关文章

/etc/sysctl.conf这个目录主要是配置一些系统信息,/etc/sys...
1.作用 useradd或adduser命令用来建立用户帐号和创建用户的起...
它们都是多模式编辑器,不同的是vim 是vi的升级版本,它不仅...
不管是我们在安装软件还是监测软件的使用性能,我们都要随时...
装好Tomcat7后,发现除了本机能访问外界访问不了,岂有此理。...
修改防火墙配置需要修改 /etc/sysconfig/iptables 这个文件,...