阻塞、非阻塞

理解 I/O-- 阻塞、非阻塞,同步、异步的概念及其区别

别等时光非礼了梦想. 提交于 2019-12-15 19:59:56
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 概念介绍 阻塞( blocking )、非阻塞( non-blocking ):可以简单理解为需要做一件事能不能立即得到返回应答,如果不能立即获得返回,需要等待, 那就阻塞了(进程或线程就阻塞在那了,不能做其它事情),否则就可以理解为非阻塞(在等待的过程中可以做其它事情)。 同步( synchronous )、异步( asynchronous ): 你总是做完一件再去做另一件,不管是否需要时间等待,这就是同步(就是在发出一个功能 调用时,在没有得到结果之前,该调用就不返回,即此时不能做下一件事情);异步则反之,你可以同时做几件事,并非一定需要一件事做 完再做另一件事(当一个异步过程调用发出后,调用者不能立刻得到结果,此时可以接着做其它事情)。同步简单理解成一问一答同步进行, 异步可以简单理解为不必等一个问题有了答案再去问另一个问题,尽管问,有答了再通知你。 阻塞和同步: 有人会把阻塞调用和同步调用等同起来,实际上他是不同的。 对于同步调用来说,很多时候当前线程还是激活的,只是从逻辑上当前函数 没有返回而已 。 例如,我们在socket中调用recv函数,如果缓冲区中没有数据,这个函数就会一直等待,直到有数据才返回。而此时,当 前线程还会继续处理各种各样的消息。 IO模型 针对网络IO的操作,可以分成 两个阶段