我正在使用Java编写服务器端应用程序。
服务器拥有系统的许多用户。对于每个用户,我想将其磁盘空间与远程网络存储同步。因为同步是独立的,所以我想同时进行同步。
我正在考虑为每个用户创建一个线程,并让同步任务同时触发。
但该系统可以拥有数万名用户。这意味着一次创建数万个线程并同时触发。我不确定这是否是JVM可以处理的事情。
即使它可以处理这个问题,这会是内存效率,因为每个线程都有自己的堆栈,这可能是一个很大的内存命中!
请告诉我你的意见。
非常感谢。
答案 0 :(得分:4)
你可以查看一个固定大小的线程池,给出一个线程池来执行你的任务。这将使多线程的好处具有明显的限制。
查看Executors.newFixedThreadPool()
答案 1 :(得分:3)
您应该研究非阻塞IO。
这是一篇关于谷歌礼貌的“随机”文章: http://www.developer.com/java/article.php/3837316/Non-Blocking-IO-Made-Possible-in-Java.htm
答案 2 :(得分:0)
就个人而言,我不会在一台机器上拥有数万名用户。如果这么多用户处于活动状态,您将无法满足每位用户的需求。你应该能买不少一台机器。
你可以在Java中拥有这么多线程,但正如你所说这样效率不高。您可以使用NIO库来管理与每个线程的多个连接。
像
这样的图书馆合适。