Socket 同步/异步 与阻塞/非阻塞区别

您所在的位置:网站首页 阻塞和非阻塞同步与异步的区别 Socket 同步/异步 与阻塞/非阻塞区别

Socket 同步/异步 与阻塞/非阻塞区别

2024-07-11 03:02| 来源: 网络整理| 查看: 265

在网上看了很多答案,也没找到合适的,也许本文也不是合适答案:)

同步和异步关注的是消息通信机制,而阻塞非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态.

同步/异步是API 被调用者的通知方式。阻塞/非阻塞则是API 调用者的等待方式。

同步、异步和阻塞、非阻塞是组合关系。

因此有4种方式:

同步阻塞

同步非阻塞

异步阻塞

异步非阻塞

------------------------------------------------------------------------

recv和recvfrom:

recv只有在收到消息后函数才返回,此为阻塞。

recvfrom则立即返回,此为非阻塞。

对于recvfrom,由于函数立即返回了,如何接收消息呢?有2种方式:

开个线程,不停的select,此为同步

使用异步机制,系统收到消息后会有消息通知,此为异步。

貌似上面的描述只有三种,阻塞,同步非阻塞,异步非阻塞,为什么?

因为一般来说,既然用阻塞了,用同步就好了,(一般)用异步有点多余,因为调用者自己都知道已经收到了,还需要系统通知?

我想这也是很容易让人把这2组概念弄混的原因吧(很少见异步阻塞模式,某些场景可能需要用到)?

from: http://my.oschina.net/shanlilaideyu/blog/484945



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3