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

  1. 在通信层面,阻塞/非阻塞,同步/异步基本是同义词,但是具体对于发送方还是接受方,行为是不同的。
  • 阻塞式发送(blocking send). 发送方进程会被一直阻塞, 直到消息被接受方进程收到。
  • 非阻塞式发送(nonblocking send)。 发送方进程调用 send() 后, 立即就可以其他操作。
  • 阻塞式接收(blocking receive) 接收方调用 receive() 后一直阻塞, 直到消息到达可用。
  • 非阻塞式接受(nonblocking receive) 接收方调用 receive() 函数后, 要么得到一个有效的结果, 要么得到一个空值, 即不会被阻塞。
  1. 对于I/O层面,非阻塞 IO 系统调用 和 异步 IO 系统调用存在着一定的差别,具体来说
  • 一个非阻塞I/O 系统调用 read() 操作立即返回的是任何可以立即拿到的数据, 可以是完整的结果, 也可以是不完整的结果, 还可以是一个空值。
  • 而异步I/O系统调用 read()结果必须是完整的, 但是这个操作完成的通知可以延迟到将来的一个时间点。

参考链接:https://www.zhihu.com/question/19732473/answer/241673170

你可能感兴趣的:(Linux,linux)