简介
在平常的工作中,遇到 IO 密集型任务,比如要频繁调用外部的 API 接口(网络IO),或者频繁读写文件(磁盘IO)通常代码都会在 IO 任务创建后等待 IO 任务结束并将需要的数据返回。这种同步的编程方式是最简单的,但同时也是效率最低的。比如在一个 Web 后端中,如果是单线程单进程的运行模式,一次就只能处理一个客户端的请求,即使引入了多线程/多进程,虽然可以同时服务多个客户端了,但是如果瞬间几千的并发连接,那么后端就必须创建相对多的线程或进程,这时候 CPU 将会花费大量的时间和资源用于线程上下文切换上,而且这么多的线程,如果用到了锁机制来保证一些共享数据的安全,还将进一步的降低 Web 后端的性能。而 IO 多路复用的出现,则给这种局面带来了转机。