gpt4 book ai didi

node.js - 事件驱动与非事件驱动 Web 服务器中的线程

转载 作者:IT老高 更新时间:2023-10-28 23:26:45 25 4
gpt4 key购买 nike

以下两张图是我对线程在事件驱动的 Web 服务器(如 Node.js + JavaScript)中与非事件驱动的 Web 服务器(如 IIS + C#)中的工作方式的理解对比

Traditional (non-event driven) Web Server

enter image description here

从图中很容易看出,在传统的 Web 服务器上,用于执行 3 个长时间运行操作的线程数比在事件驱动的 Web 服务器上要多(3 比 1。)

我认为我得到了正确的“传统 Web 服务器”计数 (3),但我想知道事件驱动的 (1)。以下是我的问题:

  1. 假设在事件驱动的场景中只使用了一个线程是否正确?这不可能是正确的,必须创建一些东西来处理 I/O 任务。对吧?

  2. 事件服务器如何处理 I/O?假设 I/O 是从数据库中读取的。我怀疑网络服务器必须创建一个线程来交出连接到数据库的工作?对吧?

  3. 如果事件驱动的 Web 服务器确实创建了线程来处理 I/O,那么好处在哪里?

  4. 对我的困惑的一个可能解释是,在传统和事件驱动两种情况下,确实创建了三个单独的线程来处理 I/O(图中未显示) 但区别实际上在于 Web 服务器本身的线程数,而不是 I/O 线程。那准确吗?

最佳答案

  1. Node 可以使用线程进行 IO。 JS 代码运行在单线程中,但所有的 IO 请求都在并行线程中运行。如果您希望某些 JS 代码在并行线程中运行,请使用 thread-a-gogo 或其他一些可以减轻这种行为的包。

  2. 1.,线程由Node创建用于IO操作。

  3. 您不必处理线程,除非您愿意。更容易开发。至少这是我的观点。

  4. 可以对 Node 应用程序进行编码,使其像另一个 Web 服务器一样运行。通常,JS 代码在单个线程中运行,但有一些方法可以使其表现不同。

如果你想尝试线程,我个人推荐threads-a-gogo(包名不那么暴露,但它很容易使用)。它更快。Node 也支持多进程,如果你也想试试的话,可以运行一个完全独立的进程。

关于node.js - 事件驱动与非事件驱动 Web 服务器中的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14189496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com