cpu、进程、线程、多线程的一个简单解释(转载)
一 dljd(linux)
1、線程:一種程序可有同時有多條執行線路在執行,線程是一個程序其中正在執行的一條執行線路;
說明:
????????線程就是一個程序的執行線路。我們寫一段程序,你要讓它執行,它總得有一個執行的線路。什么線路?就是你寫的那段程序,由一行一行的代碼組成,它從哪行代碼開始執行,然后依次執行接下來的各行代碼,最后到哪行代碼結束程序,這就是線路,也叫線程。
????????當然,我們說一個程序可以“同時”開很多條不同執行的線路,哪怕開始的是同一行或同幾行代碼,中間也都可以“同時”分開成多條不同的執行線路,這就是多線程,多線程廣義上強調的是“同時”。
2、進程:一個程序的執行,一個進程占用一個端口。
說明:
????????就是你寫一段程序,這個程序肯定包含多行代碼。我們整段程序啟動運行時,肯定有很多執行線路(線程)同時運行著。這些同時的多條線路(多線程)的運行,合在一起就是一個進程的執行。比如說含有main()方法的一段程序,從main()方法開始運行就表示一個進程正在開始運行了。當然在main()方法的運行過程中,可以同時創建并執行很多條線路(線程)。但整體來看,這么多線路(線程)的運行,合在一起就是一個進程的運行。
????????那我們說進程最重要的一個標志是什么?標志是:一個進程的運行,那么這個進程會占用一個端口,即一個進程一般會占用一個端口。那一個線程的運行會不會占用一個端口?不會,因為線程是進程里邊同時執行的一條線路。
????????那我們電腦上一般都會運行哪些進程呢?電腦上運行一個軟件,其實就是運行一段程序。那程序的運行,就要有一個入口程序(如java程序的運行入口就是main()方法)。那么一個軟件的入口程序被啟動運行,那么就表明一個進程的運行,也就表明一個端口會被占用。我們電腦上,都會啟動運行很多的軟件,那么這些軟件對應的程序都是進程,都會占用一個端口。比如mysql的入口程序一旦啟動運行,那么電腦中就會啟動一個mysql的進程,這個進程占用的端口是3306;比如tomcat的入口程序一旦啟動運行,那么電腦中就會啟動一個tomcat的進程,這個進程占用的端口是8080;
3、守護進程
????????服務的別名 —— 守護進程(就是守護linux正常運行的,為linux系統提供一些必要的支撐)。
????????服務是什么?服務本質上就是進程。進程是什么?就是一個程序的運行。也就是說,服務其實也是程序。那為什么不把服務和進程管理歸為一塊呢?因為服務和普通的進程還是有區別的。服務是支持Linux運行的一些必要程序,本質上也是進程,叫守護進程。守護進程通常默默地運行在后臺,為應用程序提供必要支撐,比如sshd、防火墻等。
????????服務主要是linux后臺使用的進程(程序),即守護進程,比如sshd、防火墻等。防火墻這個進程是linux后臺使用的進程,做為linux后臺的一個服務用的,為了支撐linux正常運行而啟用的進程,程序員基本上不使用。守護進程一般不是前臺用戶使用的,是linux自己要使用的一些進程。sshd服務,是linux專門用來接收和處理外界發過來的遠程連接請求用的;如果外界發送遠程連接請求,并且linux的sshd服務接收到遠程連接請求并建立連接以后,這時外界通過建立好的連接把linux命令發送到linux中,這時linux就會執行外界發送過來的這個命令,同時linux可以把命令的執行結果返回給外界請求者。
3、在window中對進程的管理
????????在任務管理器里面正在運行的進程(一個運行的程序,一段運行的代碼)列表,如下圖:
一個進程對應一個程序,一個程序對應一段代碼。為什么說一個進程就是一個程序呢?從圖中可以看出,一個進程大都對應一個Xxx.exe文件。Xxx.exe文件, 稱為可執行程序。Xxx.exe文件怎么來的?都是開發好的程序,然后打包成Xxx.exe文件。我們一雙擊執行Xxx.exe文件,表明一個進程的運行,表明需要占用一個端口。
????????在windows的任務管理器中,我們可以對進程進行查看、結束等操作。
3、linux中對進程的管理
????????linux中也會有很多進程運行著,這些進程也都會占用端口,ps指令:
如上圖所示,Linux中的bash進程是什么?bash進程其實就是命令行終端。命令行終端為什么一打開就是黑色的,命令行終端上為什么能敲命令;敲完命令后,為什么還可以執行;執行完命令后,還可以打印出東西來;等等這些問題,都bash進程給我們完成的,其實就是bash程序,底層對應一段代碼。
????????還有ps這個進程,我們在終端輸入ps命令并執行,后臺也是對應一個進程》對應一個程序》對應一段代碼。回顧一下我前面講過“一個命令,后臺都對應一個可執行文件.sh》對應一個程序》對應一個進程”。
二 轉載
進程(process)和線程(thread)是操作系統的基本概念,但是它們比較抽象,不容易掌握。
最近,我讀到一篇材料,發現有一個很好的類比,可以把它們解釋地清晰易懂。
1.
計算機的核心是CPU,它承擔了所有的計算任務。它就像一座工廠,時刻在運行。
2.
假定工廠的電力有限,一次只能供給一個車間使用。也就是說,一個車間開工的時候,其他車間都必須停工。背后的含義就是,單個CPU一次只能運行一個任務。
3.
進程就好比工廠的車間,它代表CPU所能處理的單個任務。任一時刻,CPU總是運行一個進程,其他進程處于非運行狀態。
4.
一個車間里,可以有很多工人。他們協同完成一個任務。
5.
線程就好比車間里的工人。一個進程可以包括多個線程。
6.
車間的空間是工人們共享的,比如許多房間是每個工人都可以進出的。這象征一個進程的內存空間是共享的,每個線程都可以使用這些共享內存。
7.
可是,每間房間的大小不同,有些房間最多只能容納一個人,比如廁所。里面有人的時候,其他人就不能進去了。這代表一個線程使用某些共享內存時,其他線程必須等它結束,才能使用這一塊內存。
8.
一個防止他人進入的簡單方法,就是門口加一把鎖。先到的人鎖上門,后到的人看到上鎖,就在門口排隊,等鎖打開再進去。這就叫"互斥鎖"(Mutual exclusion,縮寫 Mutex),防止多個線程同時讀寫某一塊內存區域。
9.
還有些房間,可以同時容納n個人,比如廚房。也就是說,如果人數大于n,多出來的人只能在外面等著。這好比某些內存區域,只能供給固定數目的線程使用。
10.
這時的解決方法,就是在門口掛n把鑰匙。進去的人就取一把鑰匙,出來時再把鑰匙掛回原處。后到的人發現鑰匙架空了,就知道必須在門口排隊等著了。這種做法叫做"信號量"(Semaphore),用來保證多個線程不會互相沖突。
不難看出,mutex是semaphore的一種特殊情況(n=1時)。也就是說,完全可以用后者替代前者。但是,因為mutex較為簡單,且效率高,所以在必須保證資源獨占的情況下,還是采用這種設計。
11.
操作系統的設計,因此可以歸結為三點:
(1)以多進程形式,允許多個任務同時運行;
(2)以多線程形式,允許單個任務分成不同的部分運行;
(3)提供協調機制,一方面防止進程之間和線程之間產生沖突,另一方面允許進程之間和線程之間共享資源。
(完)
參考文獻:阮一峰的網絡日志?進程與線程的一個簡單解釋?進程與線程的一個簡單解釋 - 阮一峰的網絡日志
什么是線程?
把一個進程比喻為一個車間,那么線程就是車間里面的一條條流水線。一個車間可以有多條流水線,流水線屬于車間。一個車間的工作過程是一個進程,一個流水線的工作過程是一個線程。進程是操作系統資源分配的最小單位(生產科3號車間負責生產3萬件包裝紙箱),線程是cup調度的最小單位(3號車間里面的每一條生產線負責生產紙箱這個具體的任務)。
多線程的概念?
就是一個進程中存在多條線程。多線程是數據共享的(共享進程中的空間地址啥的),就是3號車間有多條流水線,都共用了一個車間的資源。
多線程的應用舉例:
辦公三件套之word為例,打開word軟件就開啟了一個進程,這個進程至少要干幾件事兒,1監控鍵盤輸入;2處理文字;3定時自動保存文字信息等,這幾件事兒操作的都是同一塊數據,所以不能使用多進程(進程間數據隔離啊),只能在一個進程里并發的開啟三個縣城,如果是單線程,那就只能是鍵盤輸入時,不能處理文字和自動保存,自動保存時又不能打字。
參考文獻:開發者知識庫 線程理論之大白話?線程理論之大白話 - 開發者知識庫
總結
以上是生活随笔為你收集整理的cpu、进程、线程、多线程的一个简单解释(转载)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机维护与管理知识,关于计算机硬件的日
- 下一篇: 如何查看电脑的出厂时间(通过BIOS版本