Socket 同步/異步 與阻塞/非阻塞區別

在網上看了不少答案,也沒找到合適的,也許本文也不是合適答案:)異步

同步和異步關注的是消息通訊機制,而阻塞非阻塞關注的是程序在等待調用結果(消息,返回值)時的狀態.函數

同步/異步是API 被調用者的通知方式。阻塞/非阻塞則是API 調用者的等待方式。spa

同步、異步和阻塞、非阻塞是組合關係。線程

所以有4種方式:orm

  1. 同步阻塞同步

  2. 同步非阻塞it

  3. 異步阻塞select

  4. 異步非阻塞程序

------------------------------------------------------------------------通信

recv和recvfrom:

recv只有在收到消息後函數才返回,此爲阻塞。

recvfrom則當即返回,此爲非阻塞。

對於recvfrom,因爲函數當即返回了,如何接收消息呢?有2種方式:

  1. 開個線程,不停的select,此爲同步

  2. 使用異步機制,系統收到消息後會有消息通知,此爲異步

貌似上面的描述只有三種,阻塞,同步非阻塞,異步非阻塞,爲何?

由於通常來講,既然用阻塞了,用同步就行了,(通常)用異步有點多餘,由於調用者本身都知道已經收到了,還須要系統通知?

我想這也是很容易讓人把這2組概念弄混的緣由吧(不多見異步阻塞模式,某些場景可能須要用到)?

相關文章
相關標籤/搜索