我想關於java中的多線程設計opnion。介於每個字符的線程和每個線程/線程的線程之間。哪個更有優勢(或其他方式),遊戲服務器可以處理3000多個玩家。每個字符的線程數和每個線程的線程設計
2
A
回答
12
這些都不會給你很大的可擴展性。線程佔用相當多的空間 - 例如默認情況下,32位系統上的堆棧大小爲256K,因此對於3000位用戶,只需啓動3000個線程就需要750MB,這是在他們爲數據分配任何內存以完成實際工作之前。
線程每用戶將對可用的用戶數量進行硬性限制,與服務器可能用不同的設計處理的數量相比,這可能是人爲低的。每個區域的線程在這方面可能會稍微好一點,但它也可能會限制區域的數量。
大量的線程有重大的任務切換開銷。爲了避免這種情況,我會嘗試從設計中刪除線程的「所有權」,並使用工作池代替,如ExecutorService。遊戲處理被分解爲您隨後提交給池的工作單元。該池通常設置爲允許與內核數量相同的線程數,以便獲得最高效的執行。 (如果線程是I/O綁定的,則可以使用比內核多的線程。)
0
一般來說,線程不會放大。使用3000多個線程會出現嚴重的性能問題。
相關問題
- 1. 多線程和分配數組到c中的每個線程#
- 2. HP-UX:每個進程的線程數
- 3. 每個線程一個SQLiteConnection?
- 4. 如何在每個塊的線程數多於每個線程的線程上執行並行掃描?
- 5. Akka.io:每個演員的線程數
- 6. Spark中每個核心的線程數
- 7. 計算每秒結束的線程數
- 8. 兩個線程和1個服務,或每個線程的服務?
- 9. C#試圖枚舉每個進程線程的每個窗口
- 10. 組織線程併爲每個組設置不同的最大線程數
- 11. 多個線程,每個線程都有不同的代理設置
- 12. Java,多個線程,每次只執行一個線程
- 13. 每個線程或線程安全DAO有一個DAO?
- 14. 每個線程或每個進程是FPU控制字設置嗎?
- 15. CUDA流每個線程和庫行爲
- 16. C#線程 - 一個線程數組,其中每個線程包含一個帶有圖像的表單
- 17. 每個JVM或每個CPU核心的線程數
- 18. 如何創建多個線程池(即多個執行程序,每個線程池都有一個線程)
- 19. ThreadLocalRandom或每個線程的新隨機
- 20. 每個線程與ThreadLocal的NHibernate會話
- 21. 顯示每個線程的狀態
- 22. 每個線程的處理時間?
- 23. 副本列表,池,線程設置(1:N)的/每個線程本地存儲
- 24. 每個任務有多個線程OpenMP
- 25. Netty:每個請求一個線程
- 26. 如何計算每個線程調用函數的次數?
- 27. 每個核心1個線程,而不是Debian 8上的2個線程
- 28. Linux中的每線程區域設置
- 29. 每個進程的最大線程數 - 的sysconf失敗
- 30. 每個線程訪問多線程代碼中的數組列表
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