由於事件機器被認爲是基於事件的模型異步I/O庫(如node.js),它是單線程的,並且使用事件循環來處理併發請求,是否真的有必要關心和使用線程紅寶石應用層代碼(即軌道控制器處理請求時)?爲什麼在Ruby Event Machine中使用線程?
我更習慣於node.js模型,你實際上只是將你的代碼包裝在回調中,然後一切都爲你照顧。 (對產生新線程的kqueue,epoll等的select()系統調用是在較低級別的C++實現中處理的),並且ECMAscript本身也沒有線程。
最近,我試圖瞭解事件機器時,看到了這塊Ruby代碼:
Thread = Thread.current
Thread.new{
EM.run{ thread.wakeup }
}
# pause until reactor starts
Thread.stop
我只是好奇,當線程是在紅寶石的環境,什麼基於事件的編程範式使用具體情況需要我們使用它們。
我知道ruby具有構建到語言中的線程(MRI綠色線程,JRuby JVM線程),因此使用線程可能很誘人?但是從我的觀點來看,如果你實際上不應該在高級應用程序代碼中擔心它們,那麼它就會失去整個目的,因爲基於事件的模型幾乎被引入來解決這個問題。
謝謝。讚賞任何答案/澄清。
作爲旁註;小心你的語法。使用大寫字母,你有效地用'Thread'類的一個實例覆蓋'Thread'類。那麼你將不再能夠在'1行'之後調用期望的方法,比如''2''上的'new'。 – Volte 2016-06-04 14:49:05