【问题标题】:Does nodejs single thread model imply longer processing queues?nodejs 单线程模型是否意味着更长的处理队列?
【发布时间】:2016-05-06 00:27:35
【问题描述】:

我对 nodejs 知之甚少。我所知道的是,它适用于单线程模型,该模型为I/O 任务切换到多个线程。例如,

Request A ----> nodejs (Single Thread)

// Finds out that it the requires requires I/O operation

nodejs ----> underlying OS (Starts An Independent Thread)

// nodejs is free to serve more requests

这是否意味着对于1000 concurrent requests,在处理完所有999 请求后会有一个请求被处理?如果是,这似乎是一个低效的系统!我将运行php 称为apache 更适合(在上述情况下)。带有 PHP 的 Apache 保持启动 1000 并发线程的能力,因此没有处理队列和零等待时间。

我可能在这里遗漏了一个重要概念,但这真的是 nodejs 的工作方式吗?

【问题讨论】:

    标签: php node.js multithreading asynchronous concurrency


    【解决方案1】:

    Node.js 基于事件循环编程模型。事件循环在单线程中运行并反复等待事件,然后运行订阅这些事件的任何事件处理程序。例如,事件可以是

    定时器等待完成 下一块数据已准备好写入此文件 有一个全新的 HTTP 请求即将到来 所有这些都在单线程中运行,并且没有任何 JavaScript 代码是并行执行的。只要这些事件处理程序很小并且本身等待更多事件,一切都会很好地工作。这允许单个 Node.js 进程同时处理多个请求。

    (在事件起源的背后有一点魔力。其中一些涉及并行运行的低级工作线程。)

    在这个 SQL 案例中,在进行数据库查询和在回调中获取结果之间发生了很多事情(事件)。在此期间,事件循环不断为应用程序注入生命,并一次推进其他请求一个微小的事件。因此同时处理多个请求。

    请看这篇文章Article

    【讨论】:

      猜你喜欢
      • 2012-08-14
      • 2011-04-17
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 2012-12-17
      相关资源
      最近更新 更多