簡體   English   中英

Java - 管理大量線程與多核

[英]Java - Manage large number of threads versus multicore

我目前正在處理一個腳本,它為 Mongo 服務器的每個數據庫進行一些檢查和插入。 是多線程。

for (int i = 0; i < countDatabase; i++) {     
    new threadDatabase(database.get(i).toString()).start();            
}

問題:我有 16 個數據庫要解析...恐怕要設置腳本的 PC 無法管理 16 個(或更多)線程...

任何想法如何處理大量線程? 我聽說過池,但不確定它是否可以處理我作為參數發送的數據庫名稱......

謝謝

16個線程並不是很多線程。 當然,它的線程數可能比 CPU 內核數多,但如果您正在與遠程數據庫通信,您可能會花費大部分時間等待 I/O 完成,因此 CPU 不會成為限制因素。

除此之外,線程池對您來說也很好:

ExecutorService executorService = ...;
for (int i = 0; i < countDatabase; i++) {     
    final String dbName = database.get(i).toString();
    executorService.submit(new Runnable(){
        @Override
        public void run() {
            parseDatabase(dbName);
        }
    });
}

PC 16 線程?

查看我的 Windows 任務管理器/性能,它顯示有 1238 個線程正在運行。 它甚至沒有流汗。 頂級進程是 sidebar.exe - 66 個線程。

好的,所以您正在運行其他一些 U**xy 操作系統 - 16 個線程也不太可能成為問題。

16個線程沒什么。 如果它們都是 CPU 密集型的,那么盒子會被加載,但是,嘿,這就是重點!

如果必須,請嘗試使用池,也許是為了嘗試提高性能,但不要僅僅因為擔心 16 個線程對您的操作系統來說太多了。

Rgds,馬丁

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM