阻塞 与 非阻塞

初学的都是阻塞操作,调用一个函数如read recv 等,在函数完成,即在读到东西前,不可返回。

然而,对于复杂的通信,异步通信,异步交互,并没有一定的对话顺序。

比如A和B通信,并不总是A说一句 B再说另一句 A再回一句,完全可能是A连说三句,B再说四句,即没有一定的对话交互序列。

因此写程序时 就不能决定 send recv 的顺序。

如果程序固定是A说一句 B再说另一句 A再回一句,那么A的程序可以是 send recv send, B的程序是recv send recv。

然而,A B的对话是不确定的,完全可能是A连说三句,B再说四句, 写程序时 没办法固定一个 send recv 的顺序。如果A recv了,而B并没有send,则A等死了。


因此 需要 非阻塞模式。

非阻塞模式,调用recv时,如果对面没send,则不等待,立即返回。

非阻塞模式,可以在recv/read前边多加一个查询操作,查询是不是对面说话了,如果他说了,我再recv,再去处理,如果他没说话,我随时准备着自己去说。

查询用的函数可以是select poll 等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值