阅读它所述的spawn gem的文档:
By default,spawn will use the fork to spawn child processes. You can
configure it to do threading either by telling the spawn method when
you call it or by configuring your environment. For example,this is
how you can tell spawn to use threading on the call,
使用fork或thread之间的区别是什么,这两个决定的影响是什么,以及我如何知道使用哪个?
解决方法
线程意味着您在同一进程中的另一个线程中运行代码,而分叉意味着您分叉一个单独的进程.
一般来说,线程意味着你将使用更少的内存,因为你没有单独的应用程序实例(如果你有一个写友好的ruby副本,如ree,这个优势会减少).线程之间的通信也更容易一些.
根据您的ruby解释器,ruby可能无法有效地使用额外的核心(jruby擅长这一点,MRI更糟糕)因此产生一堆额外的线程将影响您的Web应用程序的性能,并且不会充分利用您的资源 – MRI一次只运行一个线程
Forking创建了单独的ruby实例,因此您可以更好地使用多个内核.您也不太可能对主要应用程序产生负面影响.在fork时共享打开文件描述符时需要小心谨慎,因此通常需要重新打开数据库连接,memcache连接等.
使用MRI,我会使用分叉,有了jruby,更多的情况需要用于穿线