一直都听说NodeJS有一个非常强大的特性就是IO异步,今天具体总结以下这到底是个什么东西,以做备忘。
要说到到IO异步首先就要提到两个关键字,IO阻塞和IO非阻塞。
- 阻塞模式下,一个线程只能处理一项任务,要想提高吞吐量必须通过多线程
- 非阻塞模式下,一个线程能处理多项任务,依赖事件通知方式
打个比方,你去银行办理业务,阻塞模式下为了同时处理多个业务,只能另开多个窗口接待多人。非阻塞模式下,在前一个人等待某件事情的间隙,比如客户的身份证被拿去复印了,那么趁这个间隙窗口工作人员可以继续处理后一个人的业务,当后一个人也被某件需要等待的事情耽搁需要等待时就继续处理再后一个人的业务,当在工作人员每处理完一件事情时如果前面复印身份证的被告知身份证复印好了,那么就继续处理第一个客户的事情。
当然不要简单的认为非阻塞模式下很好,因为如果被某一件事情耽搁很久时就会严重影响性能。有一个阀值,就是程序运行在10ms以内的使用NodeJS这种方式可以最大化利用IO非阻塞的优势,如果大于这个值,可能还是需要考虑传统的阻塞模式多线程处理效果比较理想。