以下两张图是我对线程在事件驱动的 Web 服务器(如 Node.js + JavaScript)中与非事件驱动的 Web 服务器(如 IIS + C#)相比如何工作的理解
从图中很容易看出,在传统的 Web 服务器上,用于执行 3 个长时间运行的操作的线程数比事件驱动的 Web 服务器上的多(3 比 1。)
我认为我得到了正确的“传统 Web 服务器”计数 (3),但我想知道事件驱动的 (1)。以下是我的问题:
假设在事件驱动的场景中只使用了一个线程是否正确?这不可能是正确的,必须创建一些东西来处理 I/O 任务。正确的?
事件服务器如何处理 I/O?假设 I/O 是从数据库中读取的。我怀疑网络服务器必须创建一个线程来交出连接到数据库的工作?正确的?
如果事件驱动的 Web 服务器确实创建了线程来处理 I/O,那么收益在哪里?
我的困惑的一个可能解释是,在传统和事件驱动两种情况下,确实创建了三个单独的线程来处理 I/O(图中未显示),但区别实际上在于线程数Web 服务器本身,而不是在 I/O 线程上。那准确吗?