【发布时间】:2021-11-29 18:29:18
【问题描述】:
我读过Rocket v0.5 现在使用 Tokio 运行时来支持异步。我知道,当我们有大量(如数百或数千个)并发 IO 绑定请求时,异步可以提供出色的可扩展性。但是许多 Web/REST 服务器应用程序根本不属于该类别,在这种情况下,我觉得 Async 只会使事情复杂化。抱歉,如果这听起来像个愚蠢的问题,但是使用 Rocket 0.5+,我仍然可以像以前一样编写传统的非异步代码吗? Rocket 0.5+ 中的异步支持是否意味着我们将仅获得async fn 处理程序的异步行为?如果是这样,Tokio 运行时是否还会在非异步代码中发挥作用?
【问题讨论】:
-
rocket 0.4 使用了一种异步形式,任何真正的服务器都会使用线程、轮询或任何其他方法。您需要异步服务器,想象一下一个客户端为一个客户端服务。 Rocker 0.5 只使用 rust 内置的异步功能。
-
@Stargateur 我不同意服务器需要异步。服务器实现的“经典”方式是它们有一个线程池,当请求到来时,服务器专用该池中的一个线程来从头到尾为请求提供服务。这样,您仍然可以并行处理多个请求。这就是有多少流行的 Web 服务器(如 Apache、Tomcat 等)已经运行了这么多年。
-
正如我所说,这也是异步的一种形式。
-
异步主要是指非阻塞;同步请求不能成为异步请求(无需干预),但异步请求可以立即(以阻塞方式)解决以使其同步。我认为它们并不相互排斥。
标签: rust rust-tokio rust-rocket