小编R. *_*man的帖子

事件驱动编程如何帮助只做 IO 的网络服务器?

我正在为我们的新后端项目考虑一些框架/编程方法。它涉及一个 BackendForFrontend 实现,它聚合下游服务。为简单起见,这些是它经过的步骤:

  1. 请求进入网络服务器
  2. 网络服务器发出下游请求
  3. 下游请求返回结果
  4. 网络服务器返回请求

事件驱动编程如何比“常规”线程每请求处理更好?一些网站试图解释,通常归结为这样的:

第二种解决方案是非阻塞调用。调用者没有等待答案,而是继续执行,但提供了一个回调,一旦数据到达就会执行。

我不明白的是:我们需要一个线程/处理程序来等待这些数据,对吗?很高兴事件处理程序可以继续,但我们仍然需要(在本例中)每个请求的线程/处理程序等待每个下游请求,对吗?

考虑这个例子:下游请求需要 n 秒才能返回。在这 n 秒内,r 个请求进来。在 thread-per-request 中,我们需要 r 个线程:每个请求一个。经过 n 秒后,第一个线程完成处理并可用于新请求。

在实现事件驱动设计时,我们需要 r+1 个线程:一个事件循环和 r 个处理程序。每个处理程序接受一个请求,执行它,并在完成后调用回调。

那么这如何改进呢?

webserver multithreading event-driven-design event-driven

4
推荐指数
1
解决办法
655
查看次数