我試圖圍繞從MRI與JRuby的角度來看多線程。通過ruby app.rb
瞭解簡單的Sinatra應用程序中的紅寶石多線程
require 'sinatra'
get '/long' do
sleep(10)
"Long operation finished"
end
get '/other' do
"Time now is #{Time.now}"
end
上的紅寶石1.9.3運行此,我期待的是,當被調用/long
我將無法完成任何其他要求: 我做了簡單的末日應用程序。但事實證明,即使/long
正在等待完成,我也可以在不同的瀏覽器中撥打/other
。
而我卡在這裏。我認爲這應該是JRuby(應用程序運行時,例如在特立尼達),但不適用於MRI。我想我必須產生幾個實例來使它以這種方式工作。
有人能解釋我在哪裏我錯了嗎?爲什麼我仍然可以從其他請求中得到迴應,即使長時間運行一個塊?
偉大的文章。謝謝 – grafthez
這是錯誤的。 mri不再使用綠色線程,這就是GIL的原因。當我們還有綠線時,我們不需要GIL。 – Cubic
謝謝。你是對的。綠線被GIL取代。我更新了我的答案。 –