日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Java线程与Linux内核线程的映射关系

發布時間:2023/12/9 linux 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java线程与Linux内核线程的映射关系 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://blog.sina.com.cn/s/blog_605f5b4f010198b5.html


Linux從內核2.6開始使用NPTL (Native POSIX Thread Library)支持,但這時線程本質上還輕量級進程。

?

Java里的線程是由JVM來管理的。它怎樣相應到操作系統的線程是由JVM的實現來確定的。

Linux 2.6上的HotSpot使用了NPTL機制,JVM線程跟內核輕量級進程有一一相應的關系線程的調度全然交給了操作系統內核。當然jvm還保留一些策略足以影響到其內部的線程調度。舉個樣例。在linux下,僅僅要一個Thread.run就會調用一個fork產生一個線程。


Java線程在Windows及Linux平臺上的實現方式,如今看來,是內核線程的實現方式。這樣的方式實現的線程,是直接由操作系統內核支持的——由內核完畢線程切換,內核通過操縱調度器(Thread Scheduler)實現線程調度,并將線程任務反映到各個處理器上。內核線程是內核的一個分身。程序一般不直接使用該內核線程,而是使用其高級接口,即輕量級進程(LWP)。也即線程。

這看起來可能非常拗口。看圖:


(說明:KLT即內核線程Kernel Thread,是“內核分身”。

每個KLT相應到進程P中的某一個輕量級進程LWP(也即線程)。期間要經過用戶態、內核態的切換,并在Thread Scheduler 下反應到處理器CPU上。)


????????這樣的線程實現的方式也有它的缺陷:在程序面上使用內核線程,必定在操作系統上多次來回切換用戶態及內核態;另外,由于是一對一的線程模型,LWP的支持數是有限的。


對于一個大型程序。我們能夠開辟的線程數量至少等于執行機器的cpu內核數量

java程序里我們能夠通過以下的一行代碼得到這個數量:

Runtime.getRuntime().availableProcessors();
所以最小線程數量即時cpu內核數量。假設全部的任務都是計算密集型的,這個最小線程數量就是我們須要的線程數。開辟很多其它的線程僅僅會影響程序的性能,由于線程之間的切換工作。會消耗額外的資源。假設任務是IO密集型的任務。我們能夠開辟很多其它的線程運行任務。當一個任務運行IO操作的時候。線程將會被堵塞,處理器立馬會切換到另外一個合適的線程去運行。

假設我們僅僅擁有與內核數量一樣多的線程。即使我們有任務要運行,他們也不能運行。由于處理器沒有能夠用來調度的線程。

??假設線程有50%的時間被堵塞,線程的數量就應該是內核數量的2倍。假設更少的比例被堵塞。那么它們就是計算密集型的。則須要開辟較少的線程。

假設有很多其它的時間被堵塞。那么就是IO密集型的程序,則能夠開辟很多其它的線程。

于是我們能夠得到以下的線程數量計算公式:

線程數量=內核數量 / (1 - 堵塞率)

轉載于:https://www.cnblogs.com/llguanli/p/7095457.html

總結

以上是生活随笔為你收集整理的Java线程与Linux内核线程的映射关系的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。