问题描述
为了在这里提供一些背景信息,我已经关注项目织机一段时间了。我已经读过the state of loom。我已经完成了异步编程。
异步编程(由java nio提供)在任务等待时将线程返回到线程池,并且不中断线程会花很长的时间。这样可以大大提高性能,我们现在可以处理更多的请求,因为它们不受操作系统线程数的直接限制。但是我们在这里失去的是背景。现在,同一任务不再仅与一个线程相关联。一旦我们将任务与线程分离,所有上下文都会丢失。异常跟踪不能提供非常有用的信息,并且调试很困难。
带有virtual threads
的项目织机进入其中,成为单个并发单元。现在,您可以在单个virtual thread
上执行单个任务。
到目前为止一切都很好,但是文章继续讲到项目织机:
简单,同步的Web服务器将能够处理更多请求,而无需更多硬件。
我不明白我们如何通过织机获得异步API带来的性能优势? asynchrounous APIs
确保不要使任何线程空闲。那么,项目织机如何使asynchronous
API更加高效和高性能呢?
编辑
让我重新提出问题。假设我们有一个http服务器,该服务器接受请求并使用支持的持久数据库进行一些操作。说,这个http服务器处理许多请求-100K RPM。两种实现方法:
- HTTP服务器具有专用的线程池。当请求进入时,线程将任务继续进行直到到达数据库为止,其中任务必须等待来自数据库的响应。此时,线程将返回到线程池并继续执行其他任务。当DB响应时,它再次由线程池中的某个线程处理,并返回HTTP响应。
- HTTP服务器仅为每个请求生成
virtual threads
。如果有IO,则虚拟线程仅等待任务完成。然后返回HTTP响应。基本上,virtual threads
没有任何合并业务。
鉴于硬件和吞吐量保持不变,在响应时间或处理更多吞吐量方面,任何一种解决方案的性能都优于另一种吗?
我的猜测是,性能不会有任何差异。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)