我试图理解1.9和1.9之前的
Ruby线程之间的区别(在标准的MRI实现中),但似乎就你可以用它们实现的好处而言,它们实际上是相同的.它是否正确?
从我有限的理解:
> 1.9之前的线程是“绿色线程”,这意味着它们由Ruby解释器管理,而不是操作系统.这样做的一个结果是,您永远不会实现真正的并发,因为您永远不会同时运行多个线程(即使您在多核/多处理器系统上). (但是,如果执行在不同线程之间切换,例如,如果某个程序运行而另一个程序在I / O上等待,则可以获得并发的外观.)
> 1.9个线程是本机线程,这意味着它们确实由操作系统管理.如果没有全局解释器锁,这将允许Ruby同时运行多个线程(在多核/多处理器系统上).但Ruby确实有一个全局解释器锁,这意味着只有一个线程可以运行,所以你再次得不到真正的并发. (但是如果执行在不同的线程之间切换,你仍然可以看到并发的外观.)
这是正确的,还是我错过了什么? 1.9线程与1.9之前的线程(在MRI中)有什么好处?
解决方法
我觉得有点愚蠢地提供这个作为答案,但你的描述完全符合我对情况的理解.
如果我们是对的,我应该补充说,以这种方式发展语言确实有意义.
请记住,functional编程,the Actor Model,和其他共享内存替代并行模型的要点是解决开发并行共享内存应用程序的极大困难. (“Threads considered harmful.”)
因此,对于Ruby来说,从没有任何并行到并行的所有内容都会期待太多.
目前的做法似乎是建立机制,但要保持巨大的锁定.我认为将来,单独调试和测试的功能区域将被允许并行执行,因为它们接收细粒度锁和并发测试.