Jpa*_*061 3 javascript multithreading single-threaded worker-thread node.js
我一直认为 JS 是一种单线程语言,这使得它对于 CPU 密集型任务效率低下。我最近遇到了工作线程以及它如何通过创建“一个进程下的多个工作线程”来解决这个低效率问题。进程和线程有什么区别?为什么 JS 突然能够产生多个工作线程来帮助主 JS 线程并与之交互以实现并发?你能帮我通俗地理解这个话题吗?谢谢
从 node v10 开始,他们引入了 WorkerThreads。WorkerThread 是 V8 Javascript 解释器的一个全新实例。它有它自己的一组变量、它自己的全局变量和它自己的运行 Javascript 的线程。您不能在主线程和 workerThread 之间或 workerThreads 之间直接共享常规 Javascript 变量。
如果内存专门分配为 SharedMemory(例如SharedArrayBuffer ),则可以直接共享内存,但是这样做时,您会面临两个访问共享内存的线程之间的竞争条件。因此,在修改共享内存时,您必须使用 Atomics 或您自己的并发管理方案来防止竞争条件。
主线程和工作线程可以相互发送消息,这些消息可以包含某些类型的数据结构,这些数据结构将通过结构化克隆机制复制并发送到另一个 V8 实例。
workerThreads 背后的想法是,它们对于从主事件循环中获取 CPU 密集型代码很有用(对服务器特别有用),因此您可以启动一个或多个 workerThreads 来处理 CPU 密集型工作并保持主事件循环空闲并响应传入事件/网络/等...
您也可以通过创建多个 nodejs 进程来做类似的事情。但是,进程比 workerThread 更重,而 workerThreads 允许您与 SharedMemory 共享内存,而单独的进程则不允许。
| 归档时间: |
|
| 查看次数: |
1097 次 |
| 最近记录: |