以下两个图表是我对事件驱动的Web服务器(如Node.js + JavaScript)与非事件驱动的Web服务器(如IIS + C#)相比如何工作的理解
从图中可以很容易地看出,在传统的Web服务器上,用于执行3次长时间运行操作的线程数大于事件驱动的Web服务器上的线程数(3 vs 1)
我认为我的"传统网络服务器"计数正确(3),但我想知道事件驱动的(1).这是我的问题:
假设在事件驱动的场景中只使用了一个线程,这是正确的吗?这可能不正确,必须创建一些东西来处理I/O任务.对?
事件服务器是如何处理I/O的?假设I/O是从数据库中读取的.我怀疑Web服务器必须创建一个线程来交接连接数据库的工作?对?
如果事件驱动的Web服务器确实创建了处理I/O的线程,那么增益是多少?
我混淆的一个可能的解释可能是,在传统和事件驱动的两种情况下,确实创建了三个单独的线程来处理I/O(图中未显示),但区别在于它上的线程数量. Web服务器本身,而不是I/O线程.那是准确的吗?
节点可以使用线程进行IO.JS代码在单个线程中运行,但所有IO请求都在并行线程中运行.如果您希望某些JS代码在并行线程中运行,请使用thread-a-gogo或其他一些缓解该行为的软件包.
同样1.
,Node为IO操作创建线程.
除非您愿意,否则不必处理线程.更容易开发.至少这是我的观点.
可以将节点应用程序编码为像另一个Web服务器一样运行.通常,JS代码在单个线程中运行,但有一些方法可以使其行为不同.
就个人而言,如果你想试验线程,我建议使用threads-a-gogo(包名不是那么透露,但很容易使用).它更快.节点还支持多个进程,如果您还想尝试,可以运行完全独立的进程.
归档时间: |
|
查看次数: |
3461 次 |
最近记录: |