2012-04-25 121 views
4

什麼是事件驅動的編程,事件驅動編程與線程有什麼關係?我在閱讀關於服務器以及他們如何處理用戶請求和管理數據時遇到了這個問題。如果用戶發送請求,服務器開始處理數據並將狀態寫入表中。爲什麼?服務器是否停止處理該用戶的數據並開始爲另一個用戶處理數據或者針對每個用戶的處理是否在不同的線程(多線程服務器)中運行?什麼是事件驅動的編程?

+1

認真嗎?爲什麼不只是谷歌的問題標題? http://en.wikipedia.org/wiki/Event-driven_programming – JonnyReeves 2012-04-25 21:01:20

+2

它不給我正確的答案:( – omegasbk 2012-04-25 21:03:04

+0

我不確定你甚至有一個問題在這裏。要回答你的問題,不,這不是什麼是事件驅動編程引用;你可能希望閱讀[觀察者模式](http://en.wikipedia.org/wiki/Observer_pattern) – JonnyReeves 2012-04-25 21:05:27

回答

6

事件驅動編程!=線程編程,但它們可以(也應該)重疊。

當需要系統「同時」處理多個動作時使用線程化編程。由於大多數操作系統使用時間共享模型進行線程活動,或者至少在線程數多於可用處理器的情況下使用時,我會同時使用它們。無論哪種方式,與你的問題沒有密切關係

當我需要一個應用程序來做兩件或兩件以上的事情時,我會使用線程編程 - 就像從鍵盤接收用戶輸入(線程1)並根據接收到的輸入運行計算(線程2)。

事件驅動的編程有點不同,但爲了擴展,它必須利用線程編程。我可以有一個等待事件/中斷的單個線程,然後在事件發生時處理事件。如果它確實是單線程的,則在處理第一個事件時,任何其他進入的事件都將被阻塞或丟失。如果我有一個多線程的事件處理模型,那麼隨着事件的發展,更多的線程將會被激活。我正在掩飾所需的生產者/工作者機制,但是再一次,與你的問題水平沒有密切關係。

爲什麼服務器在接收到事件時開始處理/存儲狀態信息?那麼,因爲它已被編程。 :-)狀態處理可能與事件處理相關,也可能不相關。狀態處理與事件處理是一個單獨的主題,就像事件不同於線程一樣。

這應該回答你提出的所有問題。 Jonny的第一條評論/觀點值得注意 - 更具體地說明你不瞭解的內容會爲你提供更好的答案。

+0

「正在處理第一個事件時,任何其他進入的事件都將被阻止或丟失」所以,Node.js會發生什麼情況,因爲它是單線程的? – Donato 2015-07-11 17:57:33

+0

@Donato - 我不太瞭解node.js來回答這個問題。再詳細一點,它可能會提出一個足夠好的SO問題。 – GlenH7 2015-07-11 20:28:15