2009-07-29 20 views

回答

4

我想大贏了,就是那個C基擴展can release the GIL。因此,例如,MySQL適配器可以非常乾淨地運行長時間運行的數據庫查詢,而不會阻塞所有其他Ruby線程。

7

1.9中的線程是本機的,但它們已經「放慢速度」,一次只允許運行一個線程。這是因爲如果線程確實並行運行,會混淆現有的代碼。

優點:

  • IO現在是異步的線程。如果線程阻塞IO,則另一個線程將繼續,直到IO完成。
  • C擴展可以使用真正的線程。

缺點:

  • 不是線程安全的可以是很難使用線程時發現問題的任何C擴展。沒有辦法將擴展標記爲線程不安全,以防止它與線程一起使用。
  • 類名相同。本地線程類應該被命名爲別的東西。
  • 最糟糕的是,線程在不同的平臺上工作不同!例如,在Solaris,Windows和Linux上,priority()是不同的。諸如loop {}之類的東西在Linux中運行良好,其他線程有機會運行。但是,在線程的Solaris線程上佔用了進程的時間,你永遠不會退出!