一 、阻塞调用和非阻塞调用
阻塞调用和非阻塞调用关注的是程序在等待调用结果(消息,返回值)时的状态。
阻塞调用是指调用结果返回之前,当前进程会被挂起。调用进程只有在得到结果之后才会返回。
非阻塞调用是指在不能立刻得到结果之前,该调用不会阻塞当前线程。
二 、同步通信和异步通信
同步通信和异步通信关注的是消息的通信机制。
同步通信,指在发出一个调用的时候,在没有得到结果之前,该调用就不返回。但是一旦调用返回,就会得到返回值。也就是说是调用者主动等待这个调用的结果。
异步通信,指在发出一个调用的时候,该调用立刻返回,所以没有返回结果。换句话说,当一个异步过程调用发出之后,调用者不会立刻得到结果。而是在调用发出之后,被调用者通过状态通知调用者。 大白话: 异步通信就是调用者调用之后就去干别的事情了,等被调用者那边好了再来告诉调用者;同步通信就是调用者发起调用之后就一直在原地等待。
三、结合两概念进行分析
在进程通信 [3] 层面, 阻塞/非阻塞, 同步/异步基本是同义词, 但是需要注意区分讨论的对象是发送方还是接收方。
发送方阻塞/非阻塞(同步/异步)和接收方的阻塞/非阻塞(同步/异步) 是互不影响的。
在 IO 系统调用层面( IO system call )层面, 非阻塞 IO 系统调用 和 异步 IO 系统调用存在着一定的差别, 它们都不会阻塞进程, 但是返回结果的方式和内容有所差别, 但是都属于非阻塞系统调用( non-blocking system call )
非阻塞系统调用(non-blocking I/O system call 与 asynchronous I/O system call) 的存在可以用来实现线程级别的 I/O 并发, 与通过多进程实现的 I/O 并发相比可以减少内存消耗以及进程切换的开销。