在閱讀了關於事件驅動和nodejs的幾篇文章之後,我能看到的唯一優點是事件驅動避免了線程的內存分配,並在可能的情況下用通知替換了輪詢。事件驅動有什麼魔力?
其他優點都值得商榷:
多線程程序更容易犯錯不是單個線程。
爭論:對於Web應用程序來說,只要處理程序函數沒有副作用,請求是相互獨立的;如果所有IO部分都由數據庫服務器處理,則不必擔心多線程。
事件驅動方法不會阻塞IO,因此可以處理更多的請求。這種優勢似乎是事件驅動的最重要特徵。在this的例子中,它與醫生辦公室進行了比較,我認爲這不合適。
爭論:在醫生辦公室的例子中,接待員不要等待病人填寫表格,而是在前一位病人填寫表格時爲其他病人服務。這是一個誤導性的例子。
a。如果我們將病人解釋爲向服務器發送請求的客戶端。服務器當然不會阻止客戶在自己的瀏覽器中填寫表單。當客戶端完成表單併發送一個http POST到服務器時,服務器將開始工作。在nodejs存在之前,web已經是一個事件驅動系統。所以這個例子無法解釋服務器端事件驅動的編程。
b。有人會說我們應該將填寫表格的病人解釋爲服務器端IO密集型操作。但區別在於:我們不支付病人填寫表格,但我們支付IO密集型手術。
所以我的觀點是,即使耗時的操作不會阻塞你當前的線程,也會有其他線程或進程或數據庫服務器被阻塞。我多次看到nodejs可以提供10k併發連接,因爲它沒有阻塞。我會說,如果沒有足夠的其他線程或進程或服務器來處理耗時的部分,這是不可能的。
在這種情況下,事件驅動無非負載使用nginx的平衡,所不同的是負載平衡的詳細餘額請求的應用程序,而事件驅動餘額耗時操作請求時,其移動所述負載平衡層向後。這樣做的唯一好處是我在這個問題開始時提到的兩個:1.它避免了線程的內存分配。 2.儘可能用通知替換投票。
感謝您閱讀至此,我的問題是:我的理解是否正確?我在爭論中犯了什麼錯誤?
當涉及到它時,您仍然必須編寫處理''事件''的代碼'。你似乎越來越受到追捧的是你應該更關注實質的風格。 ''我的代碼是否可維護,高性能,可靠?「' – ChaosPandion 2013-03-23 06:35:34
檢查這個問題的答案,因爲我認爲這可能會增強你的理解:http://stackoverflow.com/questions/3629784/how-is-node-js-inherently - 更快的時候它仍然依賴線程內部 – phairoh 2013-03-23 07:55:40
@Phairoh感謝您的信息。所以我認爲我基本上理解它是正確的。通過執行異步和回調,任務調度更加高效,因爲輪詢更少的通知。 – 2013-03-23 08:07:29