在并发编程的时候可能会遇到同步、异步、阻塞、非阻塞这些名词,简单看来可能会有很多相似之处,但是他们真的一样吗?
同步似乎等价于阻塞,异步则等价于非阻塞。其实有些狭义,但不可否认的是,在一定情况下,确实可以这么认为;因为同步一定存在着阻塞状态,而异步一定不存在阻塞的状态。
但是不是就是说 同步调用 == 阻塞调用呢?然并不是,不能将他们混为一谈。
阻塞和非阻塞强调的是程序在等待调用结果(消息,返回值)时的状态. 阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。同步和异步强调的是消息通信机制 (synchronous communication/ asynchronous communication)。同步,就是调用某个东西时,调用方得等待这个调用返回结果才能继续往后执行。异步,和同步相反 调用方不会理解得到结果,而是在调用发出后调用者可用继续执行后续操作,被调用者通过状态来通知调用者,或者通过回掉函数来处理这个调用。
同步调用:
异步调用: