同步和异步、阻塞和非阻塞
来源:互联网 发布:商汤科技 算法开发 编辑:程序博客网 时间:2024/04/28 01:25
同步和异步、阻塞和非阻塞
首先说明我对这些概念也不是很清楚,以下内容是我做的一些理事。
同步和异步、阻塞和非阻塞这是两组概念,说的是不同的事情,同步和阻塞没有必然的联系,异步和非阻塞也没有必然的联系。同步和异步是只跟IO操作过程中进程的状态变化有关。阻塞和非阻塞就是进程的两种状态。比如你去银行,排除的话就是一种同步的方式,叫号的话就是异步的方式。排队必须自己看着什么时候轮到自己,而叫号则不必,轮到你的时候会触发一个事件,或者说你会收到一个信号,别人会叫你。不管是排除还是叫号,如果你在等待的过程中不能做其他事情,那就是阻塞模式,否则就是非阻塞模式。同步的时候可以有阻塞和非阻塞,异步的时候也可以有阻塞和非阻塞。
阻塞 I/O
Linux下的I/O操作默认是阻塞I/O,即open和socket创建的I/O都是阻塞I/O。当读写操作没有完成时,函数就不会返回,进程一直阻塞在那里。
非阻塞I/O
非阻塞模式的使用并不普遍,因为非阻塞模式会浪费大量的CPU资源。
网络编程时listen,recvfrom,connect都会引起阻塞。非阻塞IO通常应用于网络编程中,IO请求时加上O_NONBLOCK一类的标志位,函数立刻返回,IO没有就绪会返回错误,需要请求进程主动轮询不断发IO请求直到返回正确
比如调用recvfrom时,如果系统还没有接收到网络数据,内核马上返回一个 EWOULDBLOCK的错误。
当一个应用程序使用了非阻塞模式的套接字,它需要使用一个循环来不停地测试是否一个文件描述符有数据可读(称做 polling(轮询))。应用程序不停的 polling 内核来检查是否 I/O操作已经就绪。这将是一个极浪费 CPU资源的操作。这种模式使用中不是很普遍。
I/O多路复用
针对批量IP操作时,使用I/O多路复用,非常有好。
异步I/O
- 同步和异步、阻塞和非阻塞
- 同步和异步、阻塞和非阻塞
- 同步和异步,阻塞和非阻塞
- 同步和异步,阻塞和非阻塞
- 同步和异步,阻塞和非阻塞
- 同步和异步,阻塞和非阻塞
- 同步和异步、阻塞和非阻塞
- 同步和异步、阻塞和非阻塞
- 同步和异步,阻塞和非阻塞
- 同步和异步,阻塞和非阻塞
- 同步和异步,阻塞和非阻塞
- 同步和异步,阻塞和非阻塞
- 同步和异步+阻塞和非阻塞
- 阻塞和非阻塞、同步和异步
- [引]同步、异步、阻塞和非阻塞
- 基本概念:同步、异步、阻塞和非阻塞
- 同步、异步、阻塞和非阻塞
- [引--]同步、异步、阻塞和非阻塞
- 腾讯公司的几道历年面试题精选
- 隐式Intent的应用
- iPad UIPopoverController弹出窗口的位置和坐标
- 互联网时代是如何损害你的大脑的?
- 12个PHP面试中常涉及的问题
- 同步和异步、阻塞和非阻塞
- linux--shell错误:syntax error near unexpected token ‘('
- 在Window下SolrColud 5.0二次开发环境部署。
- ZOJ Problem Set - 2727 List the Books
- OPC工作记录整理——第三篇(开发环境的配置)
- Convert Sorted List to Binary Search Tree
- linux点命令和source命令
- Windows Socket编程
- iphone上面编写具有root权限的程序