進程的缺點
在創建了子進程的時候,得到了可以并發執行的好處
但創建了進程資源會造成浪費
線程的引入
在同一個進程中有這樣兩個執行流,為并發執行的,稱之為線程
這里引用下《操作系統概念》中的線程概述
任務舉例
在復制的過程中,CPU在執行其他的任務了
這個時候文件數據很大,用戶想終止任務,但此時沒有任何按鈕可以給用戶終止,此時只能夠通過強制關閉復制進程才可以結束,但這樣對用戶不友好
再進行任務改進,此時有兩條任務流,一條進行copy操作,另一條執行wait操作,等待一個信號
執行過程:
1,進程CPU執行操作任務,這個時候世紀執行任務的都是線程了
2,此時thread1開始工作,啟動io指令,去執行copy操作,此時thread1進入waiting,此時CPU為其他的線程服務
3,此時用戶想要取消任務,點擊了取消按鈕,此時2號線程執行準備終止任務,但此時拿不到CPU的時間片,得等待其他的任務執行完成,此時進入ready狀態
4,當某一時刻調度成功了,thread2的代碼CPU開始執行
5,此時線程2的執行內容為:通知線程1停止拷貝
6,線程1進入ready狀態
那為啥用進程不可以執行這件任務呢
使用線程在同個內存區域完成
但使用進程需使用兩個內存空間,之間的通信成本很高
因此用線程來完成這個任務
采用多進程的開銷
在進程與進程的切換過程中,中間等待的時間有很長,當進程的數量越多,可能大多在執行進程切換的工作,而很少的時間去為應用程序而服務
線程引入的動機
一個應用通常需要同時處理很多工作,比如一個Web瀏覽器,可能需要同時處理文字和圖片,這些同時執行的任務可稱為“執行流”,我們不希望它們是順序執行的。
早期,每個執行流都要創建一個進程來實現,但是進程的創建需要消耗大量的時間和資源。
現在,和一個應用相關的所有執行任務都裝在一個進程里,這些進程內部的執行任務就是“線程”(Thread)。
線程的定義
A thread is a basic unit of CPU utilization;it comprises a thread id,a program counter,a
register set, and a stack
線程是 CPU 利?的基本單位;它包括線程id(tid)、程序計數器、寄存器集和堆棧
It shares with other threads belonging to the same process its code section, data section, and other operating-system resources, such as open files and signals.
它與屬于同?進程的其他線程共享其代碼段、數據段和其他操作系統資源,例如打開的?件和信號。
A traditional(or heavyweight) process has a single thread of control.If a process has multiple threads of control, it can perform more than one task at a time.
傳統(或重量級)進程有?個控制線程。如果?個進程有多個控制線程,它?次可以執?多個任務。
線程
多線程的好處
響應性:在多個客戶端都想要請求服務端進行任務執行的時候,多個線程可以快速響應去執行對應的任務
資源共享:多線程處于同個內存空間中,線程之間通信比跨內存的多進程通信容易
經濟:開辟新的進程需要有很大的資源開銷
可伸縮性:當在單核計算機中,t1、t2、t3在執行任務,但同一時刻CPU只會執行其中一個,共用同個CPU,為并發線程,但在多核CPU計算機當中,可以t1、t2、t3各占用一個CPU,此時并發運算次變成了并行運算,在單核與多核的切換非常靈活
多核編程
多線程模型
M:1模型
1:1模型
M:M模型
線程庫
PTHREADS
參考
B站操作系統