爲什麼多線程可以利用到多核

對於這個基礎知識,做個記錄:

首先還是複習下線程和進程的區別。
    最主要的點就是:進程是資源分配的最小單位,線程是CPU調度的最小單位。(一個是相當於一個容器,一個是具體被CPU操作的)
    進程間資源不共享,而多個線程是共享同個進程分配的資源的。
  
由於線程分用戶線程和內核線程。內核線程再調用的時候可以去不同的核心去操作。所以多線程是可以利用到多核的。
from: https://blog.51cto.com/jesnridy/2084498

Java線程可以在運行在多個cpu核上嗎?

我是一直都以爲這個問題的答案是肯定的,也就是說可以運行在多核上。
但是有一天見到這樣的一個理論,我就頓時毀三觀了。

JVM在操作系統中是作爲一個進程的,java所有的線程都運行自這個JVM進程中,
所以說java線程某個時間只可能運行在一個核上。

這個說法對我的打擊太大了,我不能接受。於是就開始多方求證。網上搜索 和朋友一起討論,
最終證實了java線程是可以運行在多核上的,爲什麼呢?

下面一句話將驚醒夢中人:
現代os都將線程作爲最小調度單位,進程作爲資源分配的最小單位。 在windows中進程是不活動的,只是作爲線程的容器。
也就是說,java中的所有線程確實在JVM進程中,但是CPU調度的是進程中的線程。
from: https://blog.csdn.net/maosijunzi/article/details/42527553?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

自己的理解:

一個進程裏的多線程肯定可以跑在多核上,否則死鎖從何而來,想想pthread_mutex_lock;
父子進程更是可以跑在多核上,因爲有說父子進程誰先結束不一定。
由於全局變量在每個進程裏都有一份拷貝,所以對多進程來說訪問全局變量是不需要加鎖控制的;線程是共享全局變量的,所以對多線程來說訪問全局變量是需要加線程鎖的。
讀 [廖雪峯-Python-多線程](https://www.liaoxuefeng.com/wiki/897692888725344/923056337842176) 有感!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章