Java 事件循环应用程序(Netty、NodeJS)和多线程应用程序(.netcore3+;,Tomcat)

Java 事件循环应用程序(Netty、NodeJS)和多线程应用程序(.netcore3+;,Tomcat),java,c#,multithreading,Java,C#,Multithreading,我只想确保我正确理解了某些web框架的工作原理: 我们有一些事件循环服务器,比如netty和NodeJS。他们使用少量线程,如果我们必须做一些困难或耗时的事情,我们会将此任务委托给另一个线程。若并没有,一个线程可以处理多个请求,只需从循环中逐个提取每个请求 另一方面,我们的服务器使用新线程(来自线程池)处理每一个请求,比如Tomcat和.net应用程序(不能说Kestrel,因为我知道,.net核心和.net 5中的传输层不仅仅是Kestrel)。它们(tomcat和.net)最大的区别在于.n

我只想确保我正确理解了某些web框架的工作原理:

  • 我们有一些事件循环服务器,比如netty和NodeJS。他们使用少量线程,如果我们必须做一些困难或耗时的事情,我们会将此任务委托给另一个线程。若并没有,一个线程可以处理多个请求,只需从循环中逐个提取每个请求
  • 另一方面,我们的服务器使用新线程(来自线程池)处理每一个请求,比如Tomcat和.net应用程序(不能说Kestrel,因为我知道,.net核心和.net 5中的传输层不仅仅是Kestrel)。它们(tomcat和.net)最大的区别在于.net有不同的、更现代的线程处理系统。Tomcat不能将未使用的线程(例如,在等待IO时)释放回线程池,我们必须等待IO操作,但.net可以,这就是为什么一个线程不等待IO,而返回到线程池并可用于另一个请求的原因。另外,据我所知,微软将线程池划分为工作线程和io,以防止长期作业阻塞所有io回调
  • 如果我所说的一切都是正确的,那么与.net多线程相比,事件循环有哪些优点?对于高负载应用程序,如果我们的端点需要执行一些不阻塞的操作,我们仍然需要从线程池创建/获取线程,而事件循环应用程序的效率将降低,因为我们无法在线程完成上一个任务或将工作委托给另一个线程之前处理新请求