gpt4 book ai didi

javascript - Node.js 多线程 : What are Worker threads and how does it work?

转载 作者:行者123 更新时间:2023-12-03 13:18:35 25 4
gpt4 key购买 nike

我一直认为 JS 是一种单线程语言,这使得它对于 CPU 密集型任务效率低下。我最近遇到了工作线程,以及它如何通过创建“一个进程下的多个工作线程”来解决这个效率低下的问题。进程和线程有什么区别?为什么 JS 突然能够产生多个工作线程来帮助主 JS 线程并与之交互以实现并发?你能帮我用外行的方式理解这个话题吗?谢谢

最佳答案

从 Node v10 开始,他们引入了 WorkerThreads。 WorkerThread 是 V8 Javascript 解释器的全新实例。它有自己的变量集、全局变量和运行 Javascript 的线程。您不能在主线程和 workerThread 之间或 workerThread 之间直接共享常规 Javascript 变量。
如果专门分配为 SharedMemory 例如 SharedArrayBuffer,则可以直接共享内存。 ,但是这样做时,您将面临两个访问共享内存的线程之间的竞争条件。因此,您必须使用 Atomics 或您自己的并发管理方案来防止在修改共享内存时出现竞争条件。
主线程和工作线程可以相互发送消息,这些消息可以包含某些类型的数据结构,这些数据结构将通过结构化克隆机制复制并发送到另一个 V8 实例。
workerThreads 背后的想法是,它们有助于将 CPU 密集型代码从主事件循环中取出(对服务器特别有用),因此您可以启动一个或多个 workerThreads 来处理 CPU 密集型工作并保持主线程事件循环空闲并响应传入事件/网络/等...
你也可以通过创建多个 nodejs 进程来做类似的事情。但是,进程比 workerThread 更重,workerThreads 允许您与 SharedMemory 共享内存,而单独的进程则不允许。

关于javascript - Node.js 多线程 : What are Worker threads and how does it work?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62885095/

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