我想關於java中的多線程設計opnion。介於每個字符的線程和每個線程/線程的線程之間。哪個更有優勢(或其他方式),遊戲服務器可以處理3000多個玩家。每個字符的線程數和每個線程的線程設計
2
A
回答
12
這些都不會給你很大的可擴展性。線程佔用相當多的空間 - 例如默認情況下,32位系統上的堆棧大小爲256K,因此對於3000位用戶,只需啓動3000個線程就需要750MB,這是在他們爲數據分配任何內存以完成實際工作之前。
線程每用戶將對可用的用戶數量進行硬性限制,與服務器可能用不同的設計處理的數量相比,這可能是人爲低的。每個區域的線程在這方面可能會稍微好一點,但它也可能會限制區域的數量。
大量的線程有重大的任務切換開銷。爲了避免這種情況,我會嘗試從設計中刪除線程的「所有權」,並使用工作池代替,如ExecutorService。遊戲處理被分解爲您隨後提交給池的工作單元。該池通常設置爲允許與內核數量相同的線程數,以便獲得最高效的執行。 (如果線程是I/O綁定的,則可以使用比內核多的線程。)
0
一般來說,線程不會放大。使用3000多個線程會出現嚴重的性能問題。
相關問題
- 1. 每個線程的看點和線程
- 2. 每每個線程
- 3. 多線程 - 線程每個核心
- 4. 多線程和分配數組到c中的每個線程#
- 5. HP-UX:每個進程的線程數
- 6. 每個線程一個SQLiteConnection?
- 7. 如何在每個塊的線程數多於每個線程的線程上執行並行掃描?
- 8. CURAND - 生成每個線程
- 9. 每個線程的每個進程的時間量
- 10. Akka.io:每個演員的線程數
- 11. 每個線程的寄存器數量
- 12. Spark中每個核心的線程數
- 13. log4j在多線程環境中。每個線程一個Appender或每個線程一個Logger或...?
- 14. 計算每秒結束的線程數
- 15. 兩個線程和1個服務,或每個線程的服務?
- 16. C#試圖枚舉每個進程線程的每個窗口
- 17. 組織線程併爲每個組設置不同的最大線程數
- 18. Java - 每個線程的多個Runnables
- 19. 每個循環的多個線程
- 20. 多個線程,每個線程都有不同的代理設置
- 21. 每個線程或線程安全DAO有一個DAO?
- 22. HtmlUnit:每個線程一個WebClient - 線程安全嗎?
- 23. Java,多個線程,每次只執行一個線程
- 24. 多線程服務器/每個線程上的新對象
- 25. 線程池中每個線程的隊列
- 26. GHC中每個線程的線程內存訪問限制
- 27. 多線程創建每個線程的隨機延遲
- 28. 每個線程組中的線程互斥
- 29. 每個線程或每個進程是FPU控制字設置嗎?
- 30. GTX 680,Keplers和每個線程
256K作爲默認是相當保守的。我認爲它在Windows上更像是1MB?和一些Linux系統上的8MB?這點仍然存在。 +1! – Arafangion 2010-07-20 04:08:48
感謝您的投票。在Windows上的默認值是256K,在其他一些平臺上的默認值更大,但我不確定高達8MB。請參閱http://forums.sun.com/thread.jspa?threadID=649476,以及http://java.sun.com/javase/technologies/hotspot/vmoptions.jsp上的-XX:ThreadStackSize熱點參數 – mdma 2010-07-20 10:44:12