簡體   English   中英

可以為雙核處理器創建多少個Java線程

[英]How many java threads can be created for a dual core processor

所以機頂盒是雙核心。 我以為我們只能創建2個合適的線程。

在每個keyreleased()中

我正在創建一個新線程

Runnable runnable = new Runnable() 
{
    int i = j;

    public void run() 
    {
        while (true) 
        {
            System.out.println("This thread is running always number is " + i);
        }
    }
};

Thread th = new Thread(runnable);
            th.setPriority(Thread.MAX_PRIORITY);
            th.start();

j++;
//...
}

但即使在創建了20多個線程之后,盒子也沒有任何問題。

是因為JVM意識到運行塊是空的並且它優化了代碼? 或者while(true)的JVM實現是不同的?

注意:我也嘗試過使用Thread.sleep(1000),但沒有問題

即使在單核機器上也可以運行20個線程。 會發生什么叫做時間切片。

http://en.wikipedia.org/wiki/Time_slice#Time_slice

這是處理器模擬多個處理器執行多個任務一次的方法。

可能的線程數與CPU內核無關。 它相當於可用內存的功能。 每個線程都需要一個單獨的堆棧,因此根據堆棧大小,數量是有限的。

例如,嘗試:

java -Xss8m -Xmx64m .....

您可能會注意到您無法創建那么多線程。

簡短回答:您可以繼續創建用戶線程,直到您的JVM / OS無法再處理。

答案很長:引用我對這個問題的另一個答案:

術語線程通常包含三個抽象層:

  • 用戶線程是應用程序啟動的線程,並將N:M映射到:
  • 內核線程是由操作系統管理的線程 ,將N:M映射到:
  • 硬件線程 ,它們是可用的實際物理資源。

您在應用程序中創建的是用戶線程。 如您所見,許多用戶線程可以映射到較少數量的硬件線程(硬件可以處理的實際並發線程數,在本例中為2)。

用戶線程和較低級別之間存在的多個層應用它們自己的調度機制來在線程上移動線程,以實現公平性,負載平衡或優先級。

線程不依賴於物理或邏輯處理器核心。 操作系統管理稱為調度程序的部分中的線程。 基本上每個線程都會在處理器核心上運行一段時間,然后它會暫停並且下一個線程有時間運行,經過一段時間后第一個線程再次運行時間。

暫無
暫無

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

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