2010-10-01 71 views

回答

2

最有可能的原因是因爲ruby沒有「真正的」線程。它有所謂的綠色線程。 ruby解釋器負責調度執行線程而不使用任何底層操作系統線程。這有效地使Ruby單線程化。

+2

即使YARV(紅寶石1.9)一次只使用一個CPU,我不認爲它使用綠色線程。 – 2010-12-05 11:01:58

+3

綠色線程不會使線程池無用。一個線程可能正在等待程序外部的某個內容,在此期間可以安排另一個線程。使用綠色線程通常(通常是?)比順序處理更高效。 – Kelvin 2012-06-01 21:31:09

20

可能是因爲使用標準庫「隊列」類很容易推出自己的產品。

q = Queue.new 
3.times { Thread.new { while something = q.pop(true) rescue nil; ... } 

這是一個很好的問題,但我可能會建議將它與Ruby Core結合起來。

+0

你有沒有得到任何迴應? – 2012-05-02 21:42:32

+2

我甚至不記得我是否現在問過...... – rogerdpack 2012-05-03 17:21:18

3

我的懷疑可能是因爲ThreadPool在Ruby的基於C的實現中沒有那麼有用。 Matz的Ruby Intepreter或另一個Ruby VM一次只能使用一個處理器。

如果您希望在多個處理器上運行多個線程,則需要使用JRuby。

+0

沒錯。線程池,綠色線程,毫無意義。 – Joshua 2010-10-02 01:13:08

+14

如果你有一些阻塞IO,肯定不是毫無意義的? – 2012-05-02 16:56:19

+0

@好點。 – 2012-05-02 21:42:14