在网上看了不少答案,也没找到合适的,也许本文也不是合适答案:)异步
同步和异步关注的是消息通讯机制,而阻塞非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态.函数
同步/异步是API 被调用者的通知方式。阻塞/非阻塞则是API 调用者的等待方式。spa
同步、异步和阻塞、非阻塞是组合关系。线程
所以有4种方式:orm
同步阻塞同步
同步非阻塞it
异步阻塞select
异步非阻塞程序
------------------------------------------------------------------------通信
recv和recvfrom:
recv只有在收到消息后函数才返回,此为阻塞。
recvfrom则当即返回,此为非阻塞。
对于recvfrom,因为函数当即返回了,如何接收消息呢?有2种方式:
开个线程,不停的select,此为同步
使用异步机制,系统收到消息后会有消息通知,此为异步。
貌似上面的描述只有三种,阻塞,同步非阻塞,异步非阻塞,为何?
由于通常来讲,既然用阻塞了,用同步就行了,(通常)用异步有点多余,由于调用者本身都知道已经收到了,还须要系统通知?
我想这也是很容易让人把这2组概念弄混的缘由吧(不多见异步阻塞模式,某些场景可能须要用到)?