Linux 线程(1):线程概述
一、進程與程序的區別
程序是應用程序作為一個靜態文件存儲在計算機系統的硬盤等存儲空間中,而進程則是處于動態條件下由操作系統維護的系統資源管理實體,也就是程序的動態執行過程。
二、進程與線程的區別
進程是系統中程序執行和資源分配的基本單位。每個進程都擁有自己的數據段、代碼段、堆棧段。為了減小進程切換的開銷,引入了線程的概念,線程是一個進程內的基本調度單位,也可以稱為輕量級進程,線程是在共享內存空間中并發的多道執行路徑,共享一個進程的資源。同進程一樣,線程也將相關的變量值放在線程控制表內。一個進程可以有多個線程,也就是有多個線程控制表和堆棧寄存器,但卻共享一個用戶地址空間,而進程在執行過程中擁有獨立的內存空間。簡而言之,一個程序至少有一個進程,一個進程至少有一個線程。需要注意的是,每個獨立的線程有一個程序運行的入口、順序執行序列和程序的出口。但是線程不能夠獨立執行,必須依存在應用程序中,由應用程序提供多個線程執行控制。
三、線程分類
線程按照調度者可分為用戶級線程和核心級線程。
用戶級線程:主要解決上下文切換問題,它的調度算法和調度過程全部由用戶自行決定,運行不需要內核支持。在這里,操作系統往往會提供一個用戶空間線程庫,該庫提供了線程的創建、調度、撤銷等功能,而內核仍然僅對進程進行管理。如果一個進程中某個線程調用了一個阻塞的系統調用,那么該進程以及進程中其他線程會同時被阻塞。由于這里的處理器時間片分配是以進程為基本單位,所以每個線程執行的時間相對減少。因此,用戶級線程在一個進程的多線程調度中無法發揮多處理器優勢。
核心級線程:由操作系統內核創建和撤銷。內核維護進程及線程的上下文信息以及線程切換。一個內核線程由于I/O操作而阻塞,不會影響其它線程的運行。核心級線程允許不同進程中線程按照同一相對優先調度方法進行調度,這樣可以發揮多處理器并發優勢。
現在操作系統基本上采用用戶級線程與內核級線程并存的方法,一個用戶級線程可以對應一個或多個核心級線程。在發揮多處理機性能的同時最大限度減少調度開銷。
總結
以上是生活随笔為你收集整理的Linux 线程(1):线程概述的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: typescript+react+ant
- 下一篇: linux查服务器硬件PN号,查看lin