以下两个图表展示了在事件驱动的Web服务器(如Node.js + JavaScript)和传统非事件驱动的Web服务器(如IIS + C#)中线程如何工作的理解。
传统(非事件驱动)Web服务器:
事件驱动的Web服务器:
从图表可以很容易地看出,在传统Web服务器上使用线程执行3个长时间运行的操作的数量大于在事件驱动Web服务器上的线程数量(3 vs 1)。
以下是我的问题: 1. 是否正确假设事件驱动的场景只使用了一个线程?这显然不正确,一定有些东西被创建来处理I/O任务。对吗? 2. 事件驱动的服务器如何处理I / O?比如说I / O是从数据库读取数据。我认为Web服务器必须创建一个线程来处理连接到数据库的工作。对吗? 3. 如果事件驱动Web服务器确实创建了线程来处理I / O,那么它的益处在哪里? 4. 我的困惑可能的一个解释是,在传统和事件驱动的两种情况下,确实创建了三个单独的线程来处理I / O(未在图片中显示),但区别真正在于Web服务器本身的线程数,而不是I/O线程。这是否准确?
传统(非事件驱动)Web服务器:
![传统(非事件驱动)Web服务器](https://istack.dev59.com/waZGw.webp)
![事件驱动的Web服务器](https://istack.dev59.com/VdHKP.webp)
以下是我的问题: 1. 是否正确假设事件驱动的场景只使用了一个线程?这显然不正确,一定有些东西被创建来处理I/O任务。对吗? 2. 事件驱动的服务器如何处理I / O?比如说I / O是从数据库读取数据。我认为Web服务器必须创建一个线程来处理连接到数据库的工作。对吗? 3. 如果事件驱动Web服务器确实创建了线程来处理I / O,那么它的益处在哪里? 4. 我的困惑可能的一个解释是,在传统和事件驱动的两种情况下,确实创建了三个单独的线程来处理I / O(未在图片中显示),但区别真正在于Web服务器本身的线程数,而不是I/O线程。这是否准确?