java - 具有 100k 线程的基于 Java 的服务器能否生存

标签 java multithreading load-balancing serversocket

我想在家托管一个应用程序。 我的 native :Core i7 2600 4核,8线程,16GB内存 光纤:100Mbps

我的目标:100k工作线程,每个线程都有自己的while循环。

我的机器还能生存吗?代码示例:

serversocket obj_sock=new serversocket()
while(true){
new thread(new workerthread(obj_socket.accept());
}

class workerthread implements runnable{
      public workerthread(socket sock){
           rs=sock.getinputstream()
           ws=sock.getoutputstream()
       }
      public void(run){
        while(true){
         //do read stream, write stream
        }
      }
}

附注 我跳过了代码中的异常。

最佳答案

我的 64 位 Java 8 上的默认线程堆栈大小是 1M。这意味着 100,000 个线程将需要 100G 的 RAM 才能运行。这是可调的,您可能会低于 16G,但软件需要使用受限堆栈进行更多测试。

操作系统似乎会让您创建那么多线程。

我强烈建议研究事件驱动(即非阻塞)协议(protocol)框架,如 NettyApache MINA实现您的服务器。

关于java - 具有 100k 线程的基于 Java 的服务器能否生存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33514438/

相关文章:

java - 用于 Quartz 作业的 HK2 工厂,执行后不会破坏服务

java - Eclipse 无法加载或找不到模块 'xxx.war' 的部署描述符

java - TestNG - 不能在套件中运行相同的测试两次

android - 从 Activity 启动 IntentService 并在 IntentService 完成时刷新 Activity

java - Quickblox: sample 不会开始

sql - 多线程处理数据库记录的最佳实践

java - 多核 CPU 上的单线程 Node.js 与 Java (Tomcat)

ssl - WebSockets 和 HTTPS 负载平衡器

nginx - 如何负载均衡容器?

amazon-web-services - AWS负载平衡器和维护页面