スレッドに関しては、OSXに関していくつかの制限があるようです。これをチェックしてください: http://support.apple.com/kb/HT3854。
必要なだけ多くの TCP スレッドを開く責任があるシステムで ruby を使用しようとしてきました。ruby で問題を再現するために、次のコードを使用しました。
10000.times { |n| p n; Thread.new { sleep 60 } }
上記のコードを実行すると、約 2022 スレッドを出力した後もこのエラーが発生し続けます。
ThreadError: unable to create new native thread
initialize at org/jruby/RubyThread.java:382
new at org/jruby/RubyThread.java:301
(root) at main.rb:1
times at org/jruby/RubyFixnum.java:273
(root) at main.rb:1
それは Jruby の実装ですが、他のすべての実装でも同じです。実際には、cpp で同じことを行うと同じ問題に直面するように、Ruby 自体には関係ありません。
#include <pthread.h>
#include <stdio.h>
#include <ulimit.h>
void thread_main(void *ptr)
{
sleep(60);
}
int main()
{
int i;
pthread_t threads[10000];
for(i = 0; i < 10000; i++) {
printf("%d\n", i);
if(pthread_create(threads + i, NULL, (void *)thread_main, NULL) != 0) {
perror("thread test");
exit(1);
}
}
}
そこにあるすべてのリソースを使用するためにスレッドの数を最大化する方法はありますか?