【发布时间】:2020-11-05 11:49:21
【问题描述】:
我最近在 tanenbaum 的操作系统一书中了解了用户级线程和内核级线程。由于用户级线程由库包处理,并且由于使用过 node.js 有点,我得出的结论是 node.js 使用 libuv 来处理工作线程,因此使用用户级线程。
但我想知道 node.js 如何处理某些工作线程进行阻塞的系统调用,然后即使某些线程能够运行,内核也会阻塞整个进程的情况。
【问题讨论】:
-
你认为哪些系统调用会阻塞整个进程,甚至进程中的其他线程?
-
@jfriend00 如果一个线程导致页面错误,内核甚至不知道线程的存在,自然会阻塞整个进程,直到磁盘 I/O 完成,即使其他线程可能是可运行的. Page Fault 会导致阻塞,因为页面需要从磁盘进入内存。
-
而且,你认为 nodejs 什么时候会导致页面错误?
-
@jfriend00 你认为什么是页面?如果你觉得我在某件事上错了,请告诉我。如果您知道答案或有任何困惑,请告诉。但我不喜欢这种迂回曲折的提问和回答方式。
-
你是第一个使用“页面错误”的人。你认为它在你的评论中是什么?在这里兜兜转转,不费吹灰之力。您似乎认为 nodejs 可能会被长时间阻塞,我试图让您说出您认为如何/何时会发生这种情况?我从来没有听说过这个问题在你所描述的操作系统/系统级别的nodejs中,所以我要求你解释为什么你认为这是一个问题?您有责任提出一个我们可以尝试提供帮助的明确问题。就你现在的问题而言,我从未听说过这个问题是 nodejs 中的问题。
标签: node.js multithreading process operating-system libuv