同步异步阻塞非阻塞杂记
gevent實現的協程是同步非阻塞還是異步非阻塞?
gevent是一個使用完全同步編程模型的可擴展的異步I/O框架。IO是不是阻塞的和協程是沒有關系的,python本來就能支持非阻塞IO,
比如在linux只要用API,更改了文件描述符的屬性就可以
協程是同步的,并不是異步的,gevent除了協程的支持還要有比如同步非阻塞IO才行。
nodejs的底層的實現支持異步非阻塞IO
協程只是改變了寫東西的方式,其實實際的東西是沒有太大變化的,單線程的代碼還是會在單線程上跑,
不過配合非阻塞IO可以更好的做東西,golang的協程支持多線程
同步,異步概念
1.同步就是發生調用時,一定等待結果返回,整個調用才結束;
2.異步就是發生調用后,立即返回,不等待結果返回。被調用者通過狀態、通知來通知調用者,或通過回調函數處理這個調用。
同步異步與阻塞,非阻塞區別
1.阻塞/非阻塞, 它們是程序在等待消息(無所謂同步或者異步)時的狀態;
2.同步/異步,是程序獲得關注消息通知的機制。
同步異步與阻塞,非阻塞組合
1.同步阻塞
效率最低(日志程序)。
2.同步非阻塞
效率也不高(需要輪詢)。
3.異步阻塞
一般模式線程回調。
4.異步非阻塞
IOCP。
服務器端編程經常需要構造高性能的IO模型,常見的IO模型有四種:
(1)同步阻塞IO(Blocking?IO):即傳統的IO模型。
(2)同步非阻塞IO(Non-blocking?IO):默認創建的socket都是阻塞的,非阻塞IO要求socket被設置為NONBLOCK。注意這里所說的NIO并非Java的NIO(New?IO)庫。
(3)IO多路復用(IO?Multiplexing):即經典的Reactor設計模式,有時也稱為異步阻塞IO,Java中的Selector和Linux中的epoll都是這種模型。
(4)異步IO(Asynchronous?IO):即經典的Proactor設計模式,也稱為異步非阻塞IO。
總結
以上是生活随笔為你收集整理的同步异步阻塞非阻塞杂记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 工具条内控件背景色设置
- 下一篇: 微信小程序图片上传(文字识别)