Node.js 在多核计算机上
当下流行的 Node.js 引起了一些疑虑,即它仅针对单进程和单线程进行优化,那么它如何扩展到多核 CPU 和多 CPU 服务器上呢?
单线程真的会限制性能吗?
尽管单线程服务器已经足够迅速,但在高负载下,我们需要充分利用多核处理器。将任务并行化是当前加速应用程序的趋势。
Node.js 与多核的结合
Node.js 确实可以扩展到多核计算机上。它通过以下方法实现:
1. 进程拆分
对于图像编码等繁重的计算任务,Node.js 可以启动子进程或向其他工作进程发送消息。在这种设计中,一个线程管理事件流,而 N 个进程执行繁重的计算任务,充分利用其他 15 个 CPU。
2. 多服务器并行
对于 Web 服务扩展,应该在一台计算机上运行多个 Node.js 服务器,每个服务器一个内核,并分摊请求流量。这提供了出色的 CPU 关联性,并且会随着内核数量的增加而几乎线性地扩展吞吐量。
使用集群模块扩展 Web 服务吞吐量
从 v6.0.X 开始,Node.js 直接包含集群模块,使其能够轻松设置多个节点工作进程,这些工作进程可以侦听单个端口。请注意,这与通过 npm 获得的较旧的 learnboost "cluster" 模块不同。
if (cluster.isMaster) { // Fork workers. for (var i = 0; i < numCPUs; i++) { cluster.fork(); } } else { http.Server(function(req, res) { ... }).listen(8000); }
工作进程将争夺接受新连接,负载最小的进程更有可能获胜。这种方式运行良好,并且可以在多核计算机上很好地扩展吞吐量。
优化负载均衡
除了使用集群模块,以下步骤还有助于进一步提高多核负载均衡:
以上是Node.js 这个单线程环境如何在多核系统上实现可扩展性?的详细内容。更多信息请关注PHP中文网其他相关文章!