相关疑难解决方法(0)

事件驱动与非事件驱动的Web服务器中的线程

以下两个图表是我对事件驱动的Web服务器(如Node.js + JavaScript)与非事件驱动的Web服务器(如IIS + C#)相比如何工作的理解

传统(非事件驱动)Web服务器

在此输入图像描述

从图中可以很容易地看出,在传统的Web服务器上,用于执行3次长时间运行操作的线程数大于事件驱动的Web服务器上的线程数(3 vs 1)

我认为我的"传统网络服务器"计数正确(3),但我想知道事件驱动的(1).这是我的问题:

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

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

  3. 如果事件驱动的Web服务器确实创建了处理I/O的线程,那么增益是多少?

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

node.js

9
推荐指数
1
解决办法
3461
查看次数

单独一个线程上的javascript回调函数

Javascript是单线程的.那么回调函数和它的包含函数是否在与主循环/事件循环相同的线程上执行?

database.query("SELECT * FROM hugetable", function(rows) {  // anonymous callback function
   var result = rows;
   console.log(result.length);
});
console.log("I am going without waiting...");
Run Code Online (Sandbox Code Playgroud)

如果query()方法及其回调函数在与事件循环相同的线程上执行,则会发生阻塞.如果不是为什么Javascript被称为单线程?

任何人都可以帮助验证javascript(browser/node.js)是否在场景后面使用多个线程以实现非阻塞?

谢谢,

朋友们,我看到了你的意见和答案.对不起,我对javascript很新.我很困惑,单线程asyn调用不会阻塞.如果有100个用户从hugeTable请求数据,这可能每个并发一分钟,并且事件循环将这些任务分配到一个队列并依次执行它们,query()方法执行如何不阻止事件循环,因为它们全部打开一个单线程?

布拉德回答了这一部分

javascript jquery multithreading javascript-events

7
推荐指数
1
解决办法
3034
查看次数

单线程NGINX如何处理这么多连接?

NGNIX使用epoll通知来了解套接字上是否有任何要读取的数据。

假设:有两个对服务器的请求。nginx收到关于这两个请求的通知,并开始执行以下操作:

  • 收到第一个请求

  • 解析头

  • 检查胸围(体型)

  • 发送第一个请求到上游服务器

  • 等等

nginx是单线程的,并且只能同时执行一项操作。

但是第二个请求会怎样?

  1. 在解析第一个请求时,nginx是否收到第二个请求?

  2. 还是在完成第一个请求后开始处理第二个请求?

  3. 或其他我不理解的东西。

如果1.是正确的,那么我不知道在单个线程中怎么可能。

如果2.正确,那么nginx怎么会这么快?因为nginx会顺序处理所有传入请求。在任何给定时间只能处理一个请求。

请帮助我理解。谢谢

sockets asynchronous epoll nginx

5
推荐指数
1
解决办法
2840
查看次数

Node.js 是单线程的,这是否意味着我们不能在不同的线程中运行多个 Node.js?

我在一篇文章中读到 Node.js 是单线程的。问题是如果我们在不同的端口运行多个 Node.js 文件怎么办?它们是否有自己的线程,或者全部都在 Node.js 主线程下?有人可以阐明我现在处于黑暗面的主题吗?

multithreading node.js

2
推荐指数
1
解决办法
937
查看次数