回答
稀土元素是源自MRI 1.8.7。因此,它只使用綠色線程。 REE改變了1.8.7的某些部分(特別是在內存管理和垃圾收集方面)。但它仍然廣泛地遵循上游MRI的設計(原始Matz的Ruby解釋器)
雖然YARV(1.9)切換到OS本地線程,但它們仍然具有全局解釋器鎖,確保只有其中一個線程運行一次。
有幾個Ruby實現與OS本機線程和沒有GIL。最突出的是JRuby(基於JVM)和Rubinius(擁有自己的VM)。這些實現提供了「真正的」併發線程。
+1,但我想指出,使用Ruby線程時,GIL並不總是有效。因此,使用線程通常會*有意義,即使它與GIL之類的概念相反也是非常直觀的。 – emboss
那麼,用GIL,你仍然可以建立「併發」序列的模型。因此,雖然每條指令只能一個接一個地執行,但代碼流(或序列)是併發的。這使得EventMachine等事物即使在GILed實現上也非常有效。 –
除了JRuby和Rubinius,他們完全擺脫了翻譯鎖定之外,CRuby/MRI的狀態在併發性方面也取得了一些進展。
一個顯着特點是與Bitmap Marking GC通過Narihiro村,像Ruby 2.0的,REE在CRuby的另一個優勢將不復存在:稀土有這使得它通過流程實現併發吸引力寫友好的GC算法副本(分叉)而不是通過線程。新的位圖標記GC在分叉新程序時將有保存不必要的內存複製的same advantage。
GIL(或正式命名的GVL)也不像起初聽起來那麼糟糕。例如,Ruby釋放解釋器鎖when doing IO。我們最近經常看到的另一個特性是,C擴展開發人員可以通過調用rb_thread_blocking_region
來手動釋放鎖,它將在GIL發佈時執行C級函數。如果要執行C中的一些操作,我們可以確信它沒有副作用,這可能會產生巨大的影響。一個很好的例子是RSA key generation - 它完全在C中運行,由OpenSSL分配內存,所以我們可以在GIL發佈的時候安全地運行它。
1.9或近期的項目(如Celluloid)中引入的纖維與今年相比,也更加友好地闡述了Ruby併發性的狀態。
最後同樣重要的是,CRuby的VM的作者Koichi Sasada正在積極研究MVM技術,這將允許在單個Ruby進程中運行多個VM,從而以另一種方式實現併發。
考慮到所有其他性能改進,使用稀土元素的爭論越來越少,一旦缺失就可以安全地切換到1.9.3或2.0.0,特別是因爲1.8系列將不再積極開發許多受歡迎的項目已經宣佈不久將支持1.8版本。
編輯:
由於霍爾格指出,REE也已經EOLed,並且不會有任何端口到1.9或進一步。所以它不僅是安全的切換,而且是正確的事情:)
+1。可以補充的是,[REE正式宣佈](http://blog.phusion.nl/2012/02/21/ruby-enterprise-edition-1-8-7-2012-02-released-end-of-迫在眉睫/)並且不會移植到1.9系列。 –
@HolgerJust是的,好點。不僅切換安全,而且實際上是正確的做法:)我會添加您的評論。 – emboss
偉大的信息,但它並沒有真正回答這個問題。 – echristopherson
- 1. Scala和Erlang使用綠色線程嗎?
- 2. I/O在綠色線程
- 3. 什麼是綠色線程?
- 4. 關於Java的綠色線程
- 5. Java線程,綠色還是本地?
- 6. 通過JNI使用UNIX ucontext庫的Java綠色線程。可能嗎?
- 7. conagmall在beaglebone綠色無線
- 8. LoadRunner是否使用本機或綠色vuser線程?
- 9. GWT應用程序可以部署藍色/綠色部署嗎?
- 10. java中的綠色線程和原生線程
- 11. 是等於「真實」線程的綠色線程
- 12. 用綠色曲線繪製動畫
- 13. 使Django走綠色
- 14. 爲什麼Java中的用戶級線程稱爲「綠色」?
- 15. 調用多個Web服務 - Node.js的VS綠色線程
- 16. 使用C排序紅色,綠色藍色使用C
- 17. Skobbler地圖中的綠色線條
- 18. GStreamer視頻中的綠色線條
- 19. 綠色線出現在相機預覽
- 20. Proguard綠色機器人事件總線
- 21. 使用Ruby Enterprise v1.8.7安裝ruby-debug/ruby-debug-base時出錯
- 22. 使綠色UIActionSheet按鈕?
- 23. 使綠色的nullsrc變黑
- 24. 在單個python進程中混合使用綠色線程和本地線程是否安全?
- 25. 綠色例外?
- 26. 綠色():和;
- 27. Ruby線程/使用API(Sinatra)
- 28. 延遲使用ruby線程
- 29. 如何使用Ruby線程
- 30. JVM綠色線程支持和操作系統本地線程支持
我希望信息與「使用」日期! –