http://www.cnblogs.com/mydomain/archive/2011/08/18/2145025.html
2011
1、在Linux2.2內核中,并不存在真正意義上的線(xiàn)程。當時(shí)Linux中常用的線(xiàn)程pthread實(shí)際上是通過(guò)進(jìn)程來(lái)模擬的,也就是說(shuō)Linux中的線(xiàn)程也是通過(guò)fork()創(chuàng )建的“輕”進(jìn)程,并且線(xiàn)程的個(gè)數也很有限,最多只能有4096個(gè)進(jìn)程/線(xiàn)程同時(shí)運行。
2、Linux2.4內核消除了這個(gè)線(xiàn)程個(gè)數的限制,并且允許在系統運行中動(dòng)態(tài)地調整進(jìn)程數上限。當時(shí)采用的是LinuxThread線(xiàn)程庫,它對應的線(xiàn)程模型是“一對一”線(xiàn)程模型,也就是一個(gè)用戶(hù)級線(xiàn)程對應一個(gè)內核線(xiàn)程,而線(xiàn)程之間的管理在內核外的函數庫中實(shí)現。
3、在Linux內核2.6之前的版本中,進(jìn)程是最主要的處理調度單元,并沒(méi)支持內核線(xiàn)程機制。Linux 2.6內核支持clone()系統調用,從而實(shí)現共享地址空間的進(jìn)程機制。因而Linux系統在1996年第一次獲得線(xiàn)程的支持,當時(shí)所使用的函數庫被稱(chēng)為LinuxThread。該函數庫就使用clone()系統調用實(shí)現內核級的線(xiàn)程機制,在此前的Linux版本中在用戶(hù)層實(shí)現POSIX線(xiàn)程庫。
由Red Hat主導的本地化POSIX線(xiàn)程庫(Native POSIX Thread Library,簡(jiǎn)稱(chēng)為NTPL),現在已經(jīng)成為GNU C函數庫的一部分,同時(shí)也成為Linux線(xiàn)程的標準。
4、線(xiàn)程屬性
1)綁定屬性
Linux中采用“一對一”的線(xiàn)程機制,也就是一個(gè)用戶(hù)線(xiàn)程對應一個(gè)內核線(xiàn)程。綁定屬性就是指一個(gè)用戶(hù)線(xiàn)程固定地分配給一個(gè)內核線(xiàn)程,因為CPU時(shí)間片的調度是面向內核線(xiàn)程(也就是輕量級進(jìn)程)的,因此具有綁定屬性的線(xiàn)程可以保證在需要的時(shí)候總有一個(gè)內核線(xiàn)程與之對應。而與之對應的非綁定屬性就是指用戶(hù)線(xiàn)程和內核線(xiàn)程的關(guān)系不是始終固定的,而是由系統來(lái)控制分配的。
2)分離屬性
分離屬性是用來(lái)決定一個(gè)線(xiàn)程以什么樣的方式來(lái)終止自己。在非分離情況下,當一個(gè)線(xiàn)程結束時(shí),它所占用的系統資源并沒(méi)有被釋放,也就是沒(méi)有真正的終止。只有當pthread_join()函數返回時(shí),創(chuàng )建的線(xiàn)程才能釋放自己占用的系統資源。而在分離屬性情況下,一個(gè)線(xiàn)程結束時(shí)立即釋放它所占有的系統資源。這里要注意的一點(diǎn)是,如果設置一個(gè)線(xiàn)程的分離屬性,而這個(gè)線(xiàn)程運行又非???,那么它很可能在pthread_create()函數返回之前就終止了,它終止以后還就可能將該線(xiàn)程號和系統資源移交給其他的線(xiàn)程使用,這可能會(huì )引起錯誤。
5、互斥量本質(zhì)是一把鎖,提供對共享資源的保護訪(fǎng)問(wèn)。
6、二進(jìn)制信號量與互斥鎖的區別
1)mutex:誰(shuí)獲得,誰(shuí)釋放,而信號量可以由其他線(xiàn)程釋放。
2)mutex初始值為1,而信號量可0可1。
7、線(xiàn)程與輕進(jìn)程
8、linux中使用進(jìn)程實(shí)現線(xiàn)程,所以新創(chuàng )建的線(xiàn)程和源線(xiàn)程進(jìn)程號可能不同。
聯(lián)系客服