Python 事件驅動與非同步IO

2022-06-23 18:21:19 字數 666 閱讀 6166

一、事件驅動程式設計是一種程式設計正規化,這裡程式的執行流由外部事件來決定。它的特點是包含一個事件迴圈,當外部事件發生時使用**機制來出發相應的處理。另外兩種常見的程式設計正規化是(單執行緒)同步以及多執行緒程式設計。

1、讓我們用例子來比較和對比一下單執行緒、多執行緒以及事件驅動程式設計模型。下圖展示了隨著時間的推移,這三種模式下的程式所做的工作。這個程式有3個任務需要完成,每個任務都在等待io操作時阻塞自身,阻塞在io操作上所花費的時間已經用灰色框標示出來了。

2、task1為單執行緒,task2為多執行緒(相當於用空間換時間),task3為協程(只能在單執行緒裡實現多工的非同步)

3、當我們面對如下的環境時,事件驅動模型通常是一個好的選擇:

a、程式中有許多工

b、任務之間高度獨立,因此他們不需要互相通訊,或者等待彼此。

c、在等待事件到來時,某些任務會阻塞。

4、當應用程式需要在任務間共享可變的資料時,這也是一個不錯的選擇,因為這裡不需要採用同步處理。

5、網路應用程式通常都有上述這些特點,這使得他們能夠很好的契合事件驅動程式設計模型。