QAH*_*QAH 14 parallel-processing concurrency multithreading node.js
我一直在寻找并发和并行之间的区别.我在Rob上发表了一篇关于并发和并行之间差异的话题.他的演讲是在Google Go语言的背景下进行的.根据我的理解,并发性是能够处理多个事物的设计,但并行性是同时多个事物的物理执行.
根据我的理解,Node.js作为单个线程进程运行.因此,尽管Node通过实现回调等方式支持并发,它是否能够处理任务的并行执行?它可以设置为在不同的处理器上运行多个线程吗?
Node可以通过Nodejs Core API中包含的Cluster或者child_process模块支持"Parallelism" .这两个模块都创建了其他进程,而不是其他线程.
创建和管理线程,有时在池中,"引擎盖下",通过libuv它node实现和使用来执行异步操作,例如从文件读取.您无法从执行的Javascript中显式创建线程.您可以libuv在以下资源中了解更多信息
libuv API文档libuv 书libuv(libuv书的一部分)此外,这是关于线程和池的很好的问题,它有很多细节.
Cluster用于在多个核心之间分配服务器的工作负载,并使它们共享一个端口.但是,在引擎盖下Cluster使用child_process.fork()并通过进程间通信进行通信.您可以Cluster在Nodejs核心API文档中阅读更多相关信息.
child_process提供了几种不同的方法来并行工作exec(),spawn()或fork().父进程可以通过管道使用进程间通信与子进程通信.
基本上,Node希望您利用事件循环并将线程管理留给libuv.这就是为什么构建通常需要锁定和线程安全措施的代码非常容易的原因.如果您必须完成需要繁重工作或大量阻塞(同步)工作的工作,那么您可以使用child_process卸载该工作.如果您需要跨核心扩展Web应用程序,请使用Cluster.
| 归档时间: |
|
| 查看次数: |
4680 次 |
| 最近记录: |