在網上看了不少答案,也沒找到合適的,也許本文也不是合適答案:)異步
同步和異步關注的是消息通訊機制,而阻塞非阻塞關注的是程序在等待調用結果(消息,返回值)時的狀態.函數
同步/異步是API 被調用者的通知方式。阻塞/非阻塞則是API 調用者的等待方式。spa
同步、異步和阻塞、非阻塞是組合關係。線程
所以有4種方式:orm
同步阻塞同步
同步非阻塞it
異步阻塞select
異步非阻塞程序
------------------------------------------------------------------------通信
recv和recvfrom:
recv只有在收到消息後函數才返回,此爲阻塞。
recvfrom則當即返回,此爲非阻塞。
對於recvfrom,因爲函數當即返回了,如何接收消息呢?有2種方式:
開個線程,不停的select,此爲同步
使用異步機制,系統收到消息後會有消息通知,此爲異步。
貌似上面的描述只有三種,阻塞,同步非阻塞,異步非阻塞,爲何?
由於通常來講,既然用阻塞了,用同步就行了,(通常)用異步有點多餘,由於調用者本身都知道已經收到了,還須要系統通知?
我想這也是很容易讓人把這2組概念弄混的緣由吧(不多見異步阻塞模式,某些場景可能須要用到)?