首先,需要理解一些基本概念:
区分同步和异步:
简单来说,同步是一种可靠的有序运行机制,当我们进行同步操作时,后续的任务是等待当前调用返回,才会进行下一步;而异步则相反,当其他任务不需要等待当前调用返回,通常依靠事件、回调等机制来实现任务间次序关系。
区分阻塞和非阻塞:
在进行阻塞操作时,当前线程会处于阻塞状态,无法从事其他任务,只有当条件就绪才能继续,比如 ServerSocket 新连接建立完毕,或数据读取、写入操作完成;而非阻塞则是不管 IO操作是否结束,直接返回,相应操作在后台继续处理。
不能一概而论认为同步或阻塞就是低效,具体还要看应用和系统特征。
java中的IO:BIO、伪异步IO、AIO、NIO
BIO(同步阻塞io):一个线程负责连接 、一请求一应答、缺乏弹性伸缩能力(线程数增加后系统性能极具下降);
伪异步IO(同步阻塞io):线程池负责连接、M请求N