Node.js 工作线程阻塞系统调用的解决方案

Solution to Blocking system call by worker thread in Node.js

我最近在 tanenbaum 的操作系统一书中了解了用户级线程和内核级线程。由于用户级线程由库包处理,并且与 node.js 一起工作过,我得出结论,node.js 使用 libuv 处理工作线程,因此使用用户级线程。

但我想知道 node.js 如何处理某些工作线程进行阻塞的系统调用然后内核将阻塞整个进程的情况,即使某些线程能够 运行.

But I wanted to know how node.js deals with the case when some worker thread makes a system call that is blocking and then the kernel will block the entire process even if some threads are capable of running.

这不是现代 OS 中发生的事情。仅仅因为进程中的一个线程 reading/writing 来自磁盘,OS 不会阻止整个进程对其其他线程执行任何操作。

现代硬件使用 DMA(直接内存访问)来 reading/writing 精确地访问磁盘,这样 CPU 在读取数据块或写入磁盘。