【发布时间】:2014-03-04 21:04:54
【问题描述】:
我想在一个小型机器集群(尽可能小)上同时支持大约 10,000 个 HTTP 客户端。我想在用户使用应用程序时保持与每个客户端的连接,以允许服务器推送更新。
我相信通常建议将异步 IO 用于这些类型的长期连接,以避免大量线程处于空闲状态。但是让线程闲置有什么问题?我发现线程模型在精神上更容易使用,但我不想做一些会让我头疼的事情。我想我必须进行实验,但我想知道是否有人知道以前的这些实验?
【问题讨论】:
-
真正的问题在于 10k 线程本身的分叉。这将使用大量的堆栈空间来执行此操作。如果你有内存,那么它可能对你有用,但 NIO 解决方案更好,尽管更复杂。
-
这也是 10k 个不同的 HTTP 服务器吗?如果没有,您可能需要考虑使用 HTTP keepalive 并重用现有连接
-
@Gray 你对典型线程的实际堆栈使用情况有估计吗?最大堆栈大小无关紧要,因为完整大小并未提交给物理 RAM。
-
@CodeChimp 正确配置为服务器级机器的 Linux 可以定期支持数百万的连接。
标签: java multithreading asynchronous nio c10k