1 回答

TA貢獻1789條經驗 獲得超8個贊
如果您啟動大量線程,它們絕對會被調度到多個內核。這個答案只是關于返回正確的值。許多“線程池”啟動的線程數與該方法返回的線程數一樣多:它應該返回可用的內核數。Runtime.getRuntime().availableProcessors()
似乎有兩個主要的解決方案,兩者都不是理想的:
在任務定義中設置參數。例如,如果您有 2 個內核,并且想要同時使用它們,則必須在任務的定義中進行設置。這不是很方便,原因有兩個:
cpu
"cpu":2048
如果選擇更大的實例,則必須確保更新此參數。
如果您希望同時運行兩個任務,這兩個任務都可以偶爾使用所有核心進行短期活動,AWS 不會在具有 的 2 核系統上安排兩個任務。它說從CPU的角度來看,VM是“滿”的。這違背了分時(Unix等)的理念,即每個任務都采用它需要的東西(例如,想象一下,在臺式PC上,如果你在雙核計算機上運行Word和Excel,而Windows不允許你啟動任何其他任務,理由是Word可能需要所有一個核心,而Excel也可能這樣做, 因此,如果另一個程序可能同時需要所有內核,則沒有足夠的內核。
"cpu":2048
在 JDK 10 及更高版本中使用 JVM 選項,如此處所述。這并不方便,因為:
-XX:ActiveProcessorCount=xx
如上所述,如果您更改實例類型,則必須更改該值。
我寫了一篇更長的博客文章,在這里描述了我的發現:https://www.databasesandlife.com/java-docker-aws-ecs-multicore/
添加回答
舉報