事件驱动的模型
事件驱动的原理
原理总结:
Nodejs 会把所有请求和异步操作都放到一个事件队列中,用户的每一个请求就是一个事件。主线程先把普通代码执行完毕,然后会循环事件队列里的函数,如果遇到有IO的操作,nodejs会去线程池里拿出一个线程去执行IO的操作,执行完毕后再把拿到数据的回调函数,放到事件队列的尾部,继续事件循环。
IO 操作
io操作就是以流的形式,进行的操作,比如网络请求,文件读取写入。io操作也就是input和output的操作。
阻塞IO
在调用阻塞io时,应用程序需要等待io完成才能返回结果。
阻塞io的特点:调用之后一定要等到系统内核层面完成所有操作之后,调用才结束。
阻塞io造成CUP等待IO,浪费等待时间,CPU的处理能力不能得到充分利用。
非阻塞IO
为了提高性能,内核提供了非阻塞io,非阻塞io跟阻塞io的差别是调用之后会立即返回。
阻塞io完成整个获取数据的过程,而非阻塞io则不带数据直接返回,要获取数据,还要通过问价你描述符再次读取。
非阻塞io返回之后,cpu时间片可以用来处理其他事物,此时性能提升非常明显。