Alc*_*ros 2 java multithreading
我想要了解java中的多线程设计.在每个字符的线程和每个映射/区域的线程之间.哪个更有优势(或其他方式),游戏服务器可以处理3000多个玩家.
mdm*_*dma 12
这些都不会给你带来很好的可扩展性.线程占用相当多的空间 - 例如,默认情况下,32位系统上的堆栈大小为256K,因此对于3000个用户,只需启动3000个线程就需要750MB,这是在他们为数据分配任何内存之前做实际的工作.
每用户线程将对可用用户数量设置一个硬限制,与服务器可能使用不同设计处理的用户相比,这可能是人为压低的.在这方面,每个区域的线程可能略微更好,但它也可能限制区域的数量.
大量线程具有显着的任务切换开销.为了避免这种情况,我会尝试从设计中删除线程的"所有权",并使用工作池,例如ExecutorService.游戏处理分为工作单元,然后您将其提交到池中.池通常设置为允许与核心数相同的线程,以便您获得最高效的执行.(如果线程是I/O绑定的,则可以使用比核心更多的线程.)