gpt4 book ai didi

node.js - nodejs(libuv)如何在一个线程中执行所有操作

转载 作者:搜寻专家 更新时间:2023-11-01 00:01:38 25 4
gpt4 key购买 nike

在事件驱动的异步编程(nodejs<- libuv)中,我们有主线程执行所有操作。

这里每个操作都有 i) 主要经营及 ii)回调操作。

这意味着主线程正在执行所有主线程以及回调操作。

例如,

int main() {
while(1) {
asyncall(op1, callback1);
asynccall(op2, callback2);
asynccall(op3, callback3);
asyncall(op4, callback1);
asynccall(op5, callback2);
asynccall(op6, callback3);
}
}

假设所有 op-i 都是网络 i/o,这样它们将由主线程(使用轮询)执行,而不是使用一些工作线程池。

现在,主线程必须做:

i) Fire new network operation op-i
ii) Check if(epoll for Linux) IO op-j completed :
a) If completed then run callback-j
Else:
b) jump to (ii)

现在,有人可以告诉主线程如何运行这些

三个操作(触发新的 n/w 操作,epoll 现有的 n/w 操作,为完成的 I/O 运行回调)

在 INTERLEAVED FASHION 中?(比如以上 6 个操作的示例序列)

最佳答案

Node.js 和 libuv 不会在主线程上执行所有操作。这是一种误解。

对于异步网络,libuv 使用您的操作系统的设施(每个操作系统都不同),对于异步文件系统操作,它使用它安排在线程池上执行的阻塞操作。看看at these docs了解更多详情。

就 node.js 而言,它在后台使用线程池这一事实“是您不关心的实现细节”。

关于node.js - nodejs(libuv)如何在一个线程中执行所有操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28963643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com