Node.js的线程和进程实战分析完整版-猿学

早期有很多关于Node.js争论的焦点都在它的单线程模型方面,在由JaniHartikainen写的一篇著名的文章《PHP优于Node.js的五大理由》中,更有一条矛头直接指向Node.js单线程脆弱的问题。如果PHP代码损坏,不会拖垮整个服务器。PHP代码只运行在自己的进程范围中,当某个请求显示错误时,它只对特定的请求产生影响。

Node.js的模型:

因此,当您编写Node.js代码时,请保持清醒,如果触发任何隐藏异常,整个Node.js进程将被取消。但是这些功能也为我们的编写代码带来了便利。例如,要实现简单的网站访问计数,Node.js只需要在内存中定义变量varcount=0;每次用户请求执行count++;

阻塞/非阻塞和异步/同步是两个不同的概念。同步并不意味着阻塞,但阻塞肯定是同步的。作为一个现实生活中的例子,我去自助餐厅做饭。我选择了A套餐,然后工作人员帮我吃饭。如果我站在我旁边等待工作人员给我吃饭,这种情况称为同步。如果工作人员帮我吃饭,我身后的人开始订购,所以整个食堂的订购服务没有停止,因为我在等待A包。这种情况称为非阻塞。此示例仅说明同步但非阻塞的情况。

多线程具有C++,C#,Python和其他语言的多线程编程。有时它非常有趣,为我们提供灵活的编程方法;但它也可能给我们带来很多麻烦,需要了解更多。知识渊博,在编写更多代码时存在更多风险,线程切换和锁定也会导致系统资源开销。

另外,我们用百分比查看最后一个列表,可以看到50%的用户在5531毫秒内返回,最慢的只有5602毫秒,响应延迟非常平均。如果我们使用集群启动4个进程,我们是否可以充分利用cpu来实现像tagg2这样的QPS?

此过程中的步骤(2),(3)和(4)通过js到C++,打开和释放文件,以及调用zlib库的gzip算法,其中创建和销毁每个异步算法。线程的开销,所以这是每个人都处理Node.js处理静态文件的原因之一。

由于所有工作都是在libuv的子线程中执行的,因此Node.js的主线程不会阻塞,当然性能也会大大提高。ifile包的使用非常简单,它可以与express无缝连接。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180815A0V4IX00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券