您的位置:首页 > 其它

阻塞与非阻塞,同步与异步

2017-05-05 22:10 316 查看

1.阻塞(blocking)与非阻塞(nonblocking)

阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态。

阻塞指系统调用返回之前,当前进程会被挂起(进入非可执行状态,CPU不会分配时间片)。函数直到有了结果才返回。

非阻塞指系统调用没有得到结果,不会阻塞当前进程,而是直接返回,同时伴随返回相应的错误提示,如EWOULDBLOCK,EAGIN。

2.同步(synchronous)与异步(asynchronous)

同步和异步关注的是消息通信机制(synchronous communication/ asynchronous communication)。

同步过程中进程触发IO操作并等待或者轮询的去查看IO操作是否完成。

例如read()调用等待读取完成返回(阻塞),或者read()直接返回不断轮询直到返回结果指示读取完成(非阻塞)。

异步过程中进程触发IO操作以后,直接返回,做自己的事情,IO交给内核来处理,完成后内核通知进程IO完成。

3. 陈硕的解释

在处理 IO 的时候,阻塞和非阻塞都是同步 IO。只有使用了特殊的 API 才是异步 IO。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息