爲何有線程這個概念呢?多線程
傳統的進程只能串行執行一系列程序。所以,引入線程來增長併發度。併發
這個時候cpu執行的最小單位就是線程了。函數
線程是一個基本的cpu執行單元,也是程序執行流的最小單位。操作系統
引入線程以後,不只是進程之間能夠併發,進程內的各線程之間也能夠併發,從而進一步提高了系統的併發度,使得一個進程內也能夠併發處理各類任務。線程
引入線程後,進程只做爲除cpu以外的系統資源的分配單元。blog
線程分爲用戶級線程和內核級線程。進程
用戶線程指不須要內核支持而在用戶程序中實現的線程,其不依賴於操做系統核心,應用進程利用線程庫提供建立、同步、調度和管理線程的函數來控制用戶線程。資源
不須要用戶態/核心態切換,速度快,操做系統內核不知道多線程的存在,所以一個線程阻塞將使得整個進程(包括它的全部線程)阻塞。同步
因爲這裏的處理器時間片分配是以進程爲基本單位,因此每一個線程執行的時間相對減小。程序
內核線程:由操做系統內核建立和撤銷。內核維護進程及線程的上下文信息以及線程切換。一個內核線程因爲I/O操做而阻塞,不會影響其它線程的運行。Windows NT和2000/XP支持內核線程。
操做系統只能知道內核級線程,所以只有內核級線程纔是處理機分配的單位。
在上面的模型中,該進程由兩個內核級線程,三個用戶級線程,在用戶看來,這個進程由3個線程。可是即便該進程在一個4核處理機上的計算機運行,也最多隻能分配到兩個核,最多隻能有兩個用戶線程併發執行。