一個電腦只有一個CPU。
一個CPU可以有多個核心。
最初一個核心只處理一個線程。單核單線程、雙核雙線程。但是這會造成資源浪費,打一個比方,一個核心相當於一家超市,A管進貨,B管擺貨,C管收銀。但是現在沒有貨可擺的時候,B是不是可以去當收銀員呢?
這就出現了超線程技術,單核雙線程,雙核四線程。就是把一個核心模擬成兩個核心,在一個核心一些資源閒着的時候,可以利用起來,當成一個核心來用。
在運行一般的小程序,很少有滿載的情況,沒有滿負荷工作的話,總有一些資源在閒置。那這時候,超線程就有用了。
如果是3D渲染一類的極端任務,CPU一直滿載,超線程就沒什麼用了。
進程和線程的主要差別在於它們是不同的操作系統資源管理方式。進程有獨立的地址空間,一個進程崩潰後,在保護模式下不會對其它進程產生影響,而線程只是一個進程中的不同執行路徑。線程有自己的堆棧和局部變量,但線程之間沒有單獨的地址空間,一個線程死掉就等於整個進程死掉,所以多進程的程序要比多線程的程序健壯,但在進程切換時,耗費資源較大,效率要差一些。但對於一些要求同時進行並且又要共享某些變量的併發操作,只能用線程,不能用進程。 一個程序至少有一個進程,一個進程至少有一個線程.
線程是進程的一部分
CPU調度的是線程並非是進程,線程是隸屬於進程的,所以我們也可以認爲是進程在切換。
系統爲進程分配資源,不對線程分配資源,進程內的資源對於線程是共享的。