同步,异步,阻塞,非阻塞
2014-03-28 17:17
148 查看
同步: '你'亲自办这件事
异步: 交代要做的事情,然后忙其他的事情;'别人'(内核)会充当你的跑腿,在条件就绪后将这事办成,然后通知你(callback);
阻塞: 如果条件未就绪,'你'必须死等它就绪;进程睡眠
非阻塞:如果条件未就绪,'你'可以转身作别的事情;进程可以作任何想做的事情,不过通常是低效的轮询。
以这种理解方式,阻塞/非阻塞只对同步操作有意义;异步I/O总是意味着进程不会因为I/O陷入睡眠。
将" select"归类为异步+blocking不妥,select实际上完成的只是read/write的第一部分:等待条件就绪;唯一的改进是可以等待多个条件。"select + read/write"的调用形式容易产生"系统通知我条件就绪"的假象,可实际上你不过是在条件就绪的时候醒来,然后仍然亲自动手完成了数据复制的操作。
依然使用银行的隐喻:
柜台R:只能取款
柜台W:只能存款
read: 亲自在柜台R排队(进程睡眠) + 取款
write: 亲自在柜台W排队(进程睡眠) + 存款
select + read/write : 亲自同时在R、W两个柜台排队(进程睡眠) + (存款|取款|存款+取款)
AIO : 告诉心腹小弟要取款若干,然后忙别的事情;小弟取款完毕将其如数奉上。
UNP一书中6.2节对I/O模型的分类我觉得很合理:
1).read/write、read + NON_BLOCK、select、signal driven I/O 都属于同步I/O; 它们的共同特点是:将数据从内核空间复制到到用户空间的这个操作,是由用户空间的代码显式发起的。
2).只有AIO 属于 异步I/O;内核不露声色的将数据从内核空间复制到用户空间,然后通知进程。
我自己总结一下:
阻塞,非阻塞是函数级的,一个函数功能还没有执行完就立即返回可以理解问非阻塞。
同步,异步是框架级的,有一套机制来做这件事,例如注册一个回调函数,有框架来在适当的时间去执行这个回调,而不用你自己写什么时候调用。
异步: 交代要做的事情,然后忙其他的事情;'别人'(内核)会充当你的跑腿,在条件就绪后将这事办成,然后通知你(callback);
阻塞: 如果条件未就绪,'你'必须死等它就绪;进程睡眠
非阻塞:如果条件未就绪,'你'可以转身作别的事情;进程可以作任何想做的事情,不过通常是低效的轮询。
以这种理解方式,阻塞/非阻塞只对同步操作有意义;异步I/O总是意味着进程不会因为I/O陷入睡眠。
将" select"归类为异步+blocking不妥,select实际上完成的只是read/write的第一部分:等待条件就绪;唯一的改进是可以等待多个条件。"select + read/write"的调用形式容易产生"系统通知我条件就绪"的假象,可实际上你不过是在条件就绪的时候醒来,然后仍然亲自动手完成了数据复制的操作。
依然使用银行的隐喻:
柜台R:只能取款
柜台W:只能存款
read: 亲自在柜台R排队(进程睡眠) + 取款
write: 亲自在柜台W排队(进程睡眠) + 存款
select + read/write : 亲自同时在R、W两个柜台排队(进程睡眠) + (存款|取款|存款+取款)
AIO : 告诉心腹小弟要取款若干,然后忙别的事情;小弟取款完毕将其如数奉上。
UNP一书中6.2节对I/O模型的分类我觉得很合理:
1).read/write、read + NON_BLOCK、select、signal driven I/O 都属于同步I/O; 它们的共同特点是:将数据从内核空间复制到到用户空间的这个操作,是由用户空间的代码显式发起的。
2).只有AIO 属于 异步I/O;内核不露声色的将数据从内核空间复制到用户空间,然后通知进程。
我自己总结一下:
阻塞,非阻塞是函数级的,一个函数功能还没有执行完就立即返回可以理解问非阻塞。
同步,异步是框架级的,有一套机制来做这件事,例如注册一个回调函数,有框架来在适当的时间去执行这个回调,而不用你自己写什么时候调用。
相关文章推荐
- 浅谈同步异步、阻塞非阻塞
- TCP同步与异步及阻塞模式,多线程+阻塞模式,非阻塞模式简单介绍
- IO - 同步,异步,阻塞,非阻塞
- 同步/异步 & 阻塞/非阻塞
- Linux socket 阻塞与非阻塞,同步与异步、I/O模型
- socket阻塞与非阻塞,同步与异步、I/O模型
- 网络编程中阻塞与非阻塞、同步与异步、I/O模型的理解
- Linux 同步 异步 阻塞 非阻塞
- 网络编程中同步、异步、阻塞和非阻塞四种调用方式的区别
- 同步和异步区别 阻塞和非阻塞
- 怎样理解阻塞非阻塞与同步异步的区别?
- 转:关于阻塞非阻塞、同步与异步的了解
- 阻塞,非阻塞,单线程,多线程,异步,同步
- 226 关于同步、异步、阻塞、非阻塞
- socket阻塞与非阻塞,同步与异步
- linux下的 I/O 模型,同步/异步,阻塞/非阻塞介绍
- IO阻塞与非阻塞,同步与异步学习笔记
- 关于同步异步非阻塞阻塞[推荐]
- 网络IO之阻塞、非阻塞、同步、异步总结
- 异步,同步,阻塞,非阻塞,并行,并发,