ᴇʟᴇ*_*ᴀтᴇ 11 java multithreading asynchronous nio c10k
我想在一小组机器上支持大约10,000个并发HTTP客户端(尽可能小).我想在用户使用应用程序时保持与每个客户端的连接,以允许服务器推送更新.
我相信通常建议将async IO用于这些长期连接,以避免大量线程处于空闲状态.但线程闲置有什么问题?我发现线程模型在精神上更容易使用,但我不想做一些会让我头疼的事情.我想我将不得不进行实验,但我想知道是否有人知道以前的这些实验中的任何实验?
异步 I/O 基本上意味着您的应用程序执行大部分线程调度。您不必让操作系统随机挂起您的线程并调度另一个线程,而是只拥有与 CPU 核心数量相同的线程,并在最合适的点让出其他任务(当线程到达 I/O 操作时,这将需要一些时间)。时间。
从性能的角度来看,上述似乎是一个明显的胜利,但异步编程模型在几个方面要复杂得多:
另一方面,现代操作系统发生了许多有利的改进和优化,大部分消除了同步 I/O 编程的性能缺点:
一篇讨论了上述大部分内容和其他一些观点的经典论文是对我在这里所说的内容的一个很好的补充:
https://www.usenix.org/legacy/events/hotos03/tech/full_papers/vonbehren/vonbehren_html/index.html
| 归档时间: |
|
| 查看次数: |
2154 次 |
| 最近记录: |