理解Python和Node.js的異步原理

問題介紹

衆所周知,python 的 aysnc/await 和 node.js 都是單線程實現的異步操作,很多人都告訴我“node.js”自帶多線程功能,關於原理又一問三不知。
實際上兩者實現異步的原理十分簡單。


異步原理

事實上,所謂的“單線程實現異步操作”,本質上是一個線程在調度現在該執行的語句,而大家所說的多線程併發編程,指的是cpu調度多線程。
一個是主線程決定接下來該執行哪個語句,一個是cpu決定現在該運行哪個線程,區別就顯而易見了吧。

既然知道了async/await只用了一個線程在實現異步操作,那爲什麼能變快呢?
事實上,異步功能是爲了解決網絡/進程通訊帶來不必要等待的問題。
若不使用異步編程,你的網絡請求發出後,主線程就會幹等着另一方接受請求並作出迴應,然而這個時間是可以被充分利用的,因此纔有了異步操作。

由此看來,你等待的請求必須得是另外的機器或者進程在進行計算,這個計算不能佔用你的主線程的資源,否則就和同步操作沒有任何區別,這也是很多人產生誤區的地方。

使用方法

Python

python 的使用方法是,在aysnc函數中,你先發出若干個請求,發出請求後可以做一些其他的事情,最後再await這些請求即可。
具體的實例網上有很多,就不過多介紹。

node.js

node.js的調度和python不太一樣,node.js有一個回調函數,在請求得到迴應後會通知主線程請求已經完成了,並執行回調函數,因此寫出來的代碼看起來就像“自帶多線程”一樣。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章