con*_*t47 3 ruby multithreading
我想知道这个,除了这个之外找不到任何东西
"线程调度程序错误修复和性能改进.在Ruby Enterprise Edition上的线程可以比官方Ruby 1.8快10倍"
REE源自MRI 1.8.7.因此,它只使用绿色线程.REE更改了1.8.7的某些部分(特别是在内存管理和垃圾收集方面).但它仍然广泛遵循上游MRI(最初的Matz的Ruby解释器)的设计
虽然YARV(1.9)切换到OS本机线程,但它们仍然具有全局解释器锁定,确保一次只运行其中一个线程.
有几个Ruby实现与OS本机线程,没有GIL.最突出的是JRuby(基于JVM)和Rubinius(拥有自己的VM).这些实现提供"真正的"并发线程.
除了完全摆脱翻译锁的JRuby和Rubinius之外,CRuby/MRI的状态在并发方面也取得了一些进展.
一个值得注意的特点是,使用Narihiro Nakamura 的Bitmap Marking GC,从Ruby 2.0开始,REE相对于CRuby的另一个优势将会消失:REE有一个关于写友好的GC算法的副本,这使得它对于通过进程实现并发性具有吸引力(分叉)而不是通过线程.新的Bitmap Marking GC具有同样的优势,可以在分叉新进程时节省不必要的内存复制.
GIL(或正式称为GVL)也不像最初听起来那么糟糕.例如,Ruby 在执行IO时释放解释器锁.我们最近经常看到的另一个特性是C扩展开发人员能够通过调用手动释放锁rb_thread_blocking_region,这将在发布GIL时执行C级函数.如果要执行C中的某些操作,我们可以放心它没有副作用,这会产生巨大的影响.一个很好的例子是RSA密钥生成 - 它完全在C中运行,内存由OpenSSL分配,因此我们可以在发布GIL时安全地运行它.
与几年前相比,像Celluloid这样的1.9或近期项目中引入的光纤对于Ruby并发状态也更加友好.
最后,CRuby VM的作者Koichi Sasada正在积极研究MVM技术,该技术允许在单个Ruby进程中运行多个VM,从而以另一种方式实现并发.
考虑到所有其他性能改进,使用REE的论据越来越少,一旦出现就可以安全地切换到1.9.3或2.0.0,特别是因为1.8系列将不再被积极开发和许多受欢迎的项目已经宣布很快就会放弃对1.8的支持.
编辑:
正如霍尔格指出的那样,REE也已被EOL,并且将没有1.9或更远的端口.因此,它不仅可以安全切换,而且还可以做正确的事:)