这个问题有可能是我个人的疑惑,或许其他人一看就明白,人总有转不过弯的时候!
NodeJS是单线程的异步操作,在书上讲这一点的时候往往会拿出常规的做法来与之对比:单线程的阻塞操作。
书中写道:
线程在执行中如果遇到磁盘读写或网络通信(统称为 I/O 操作),
通常要耗费较长的时间,这时操作系统会剥夺这个线程的 CPU 控制权,使其暂停执行,同
时将资源让给其他的工作线程,这种线程调度方式称为 阻塞。当 I/O 操作完毕时,操作系统
将这个线程的阻塞状态解除,恢复其对CPU 的控制权,令其继续执行。
比如单线程中遇到一个读取txt文件的操作,按照上面的说法,此时该线程的CPU控制权被剥夺了。当这个操作完成后该线程再重新拥有CPU控制权。
我大感不解:既然失去了CPU,那这个对txt的处理是谁做的呢,难道还有另外一个CPU不成?
我一直认为计算机上所有执行的操作全都是CPU来完成,其实不然。就拿读取硬盘上的某txt文件来说,CPU发出读取txt指令,但具体的读取操作并
不是CPU去做的,而是硬盘去做的。CPU只是负责把指令送到数据总线,是其它设备接到命令并按照CPU的要求去处理数据,然后再把数据送来到
总线接口处。此时通知CPU,CPU才会再次接手工作对数据进行下一步操作。
我对这个解释还是比较满意的,如果有问题希望大家多多指出。