文档章节

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

 山里来的鱼
发布于 2015/07/29 00:07
字数 361
阅读 809
收藏 20

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

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

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

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

因此有4种方式:

  1. 同步阻塞

  2. 同步非阻塞

  3. 异步阻塞

  4. 异步非阻塞

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

recv和recvfrom:

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

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

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

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

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

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

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

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

© 著作权归作者所有

粉丝 8
博文 156
码字总数 28874
作品 0
珠海
程序员
私信 提问
Java NIO入门之浅析I/O模型

Java NIO入门之浅析I/O模型 海子 Java架构沉思录 1周前 点击上方“Java架构沉思录”,选择“置顶公众号”。 有内涵、有价值的文章第一时间送达! 作者:海子 原文:http://www.cnblogs.com/...

颓废的幻想者
2018/05/24
0
0
IO复用,AIO,BIO,NIO,同步,异步,阻塞和非阻塞 区别

如果面试问到IO操作,这篇文章提到的问题,基本是必问,百度的面试官问我三个问题 (1)什么是NIO(Non-blocked IO),AIO,BIO (2) java IO 与 NIO(New IO)的区别 (3)select 与 epoll,poll区别 我...

1527
2018/07/16
0
0
Java I/O 模型的演进

相关概念 同步和异步 阻塞和非阻塞 Unix I/O 模型 阻塞 I/O 非阻塞 I/O I/O 多路复用(异步阻塞 I/O) 信号驱动 I/O(SIGIO) 异步 I/O 几种 I/O 模型的比较 常见 Java I/O 模型 “阻塞I/O”...

罗文浩
2016/03/03
23
0
IO读写——同步、异步与阻塞、非阻塞之间的区别

阻塞和非阻塞,同步和异步 1 例子 故事:老王烧开水。 出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。 老王想了想,有好几种等待方式 1.老王用水壶煮水,并且站...

caisongcheng_good
2018/05/08
0
0
IO复用,AIO,BIO,NIO,同步,异步,阻塞和非阻塞 区别

如果面试问到IO操作,这篇文章提到的问题,基本是必问,百度的面试官问我三个问题 (1)什么是NIO(Non-blocked IO),AIO,BIO (2) java IO 与 NIO(New IO)的区别 (3)select 与 epoll,poll区别 我...

1527
2018/07/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

lua字符串和时间戳相互转换

1. 时间戳转成格式化字符串 直接利用函数os.date()将时间戳转化成格式化字符串.```local timestamp = 1561636137;local strDate = os.date("%Y/%m/%d %H:%M:%S", timestamp)print("strD......

书香神
55分钟前
1
0
代码规范

代码格式化 安装vscode插件:Prettier - Code formatter 格式化配置:将下列配置写入到vscode的settings.json文件 (遵照代码格式化) "prettier.disableLanguages": ["vue"], "prettier.......

TreeZhou0511
今天
6
0
python实现人工神经网络的一个例子

人工神经网络已经有无数的开源框架,比如tensorflow,caffe等,可以直接用。但最近需要做一个小样例,把基本思想讲一讲,因此自己写了一个demo,以供参考。 下面直接上代码,代码中有注释,比...

propagator
今天
8
0
远程dubugger

1、在tomcat的bin下/data/project/XXX/apache-tomcat-8.5.23/bin 在catalina.bat文件中新增如下即可 JAVA_OPTS="-Xmx1024m -Xms1024m -agentlib:jdwp=transport=dt_socket,server=y,suspend......

一只小青蛙
今天
3
0
jemter 连接MySQL

jemter 连接MySQL 点击测试计划,测试计划最后”添加目录或jar包到ClassPath“,点击浏览,添加mysql-connector.jar mysql-connector.jar的下载地址: https://mvnrepository.com/artifact/my...

xiaobai1315
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部