node如何实现异步非阻塞(I/O)

在node中,I/O(输入输出)是异步非堵塞的关键,I/O操作通常比较耗时但不会独占CPU,典型的I/O比如文件读写,远程数据库读写,网络请求等,如果用同步API来进行I/O操作,在返回结果之前就只能等待,此时阻塞代码会霸占cpu,导致本进程所有代码都等待,而node.js里面的I/O API都是不会霸占CPU的(原因:node中的核心库libuv会将建立的所有I/O操作内容绑定到单个线程上。只要每个事件循环在不同的线程中,就可以运行多个事件循环,libuv为Node.js提供了跨平台、线程池、事件池、异步I/O等能力),所以是非阻塞的。拿JS中的setTimeout来打比方,当用户使用setTimeout时,JS会开辟出一个异步线程池,与主线程分开执行,结果就是之前的代码继续执行,setTimeout的代码延时执行,等成功后再调用主线程的方法

发表评论

后才能评论