10、线程文化
1、在Linux2.2內核中,并不存在真正意義上的線程。當時Linux中常用的線程pthread實際上是通過進程來模擬的,也就是說Linux中的線程也是通過fork()創建的“輕”進程,并且線程的個數也很有限,最多只能有4096個進程/線程同時運行。
2、Linux2.4內核消除了這個線程個數的限制,并且允許在系統運行中動態地調整進程數上限。當時采用的是LinuxThread線程庫,它對應的線程模型是“一對一”線程模型,也就是一個用戶級線程對應一個內核線程,而線程之間的管理在內核外的函數庫中實現。
3、在Linux內核2.6之前的版本中,進程是最主要的處理調度單元,并沒支持內核線程機制。Linux 2.6內核支持clone()系統調用,從而實現共享地址空間的進程機制。因而Linux系統在1996年第一次獲得線程的支持,當時所使用的函數庫被稱為LinuxThread。該函數庫就使用clone()系統調用實現內核級的線程機制,在此前的Linux版本中在用戶層實現POSIX線程庫。
??? 由Red Hat主導的本地化POSIX線程庫(Native POSIX Thread Library,簡稱為NTPL),現在已經成為GNU C函數庫的一部分,同時也成為Linux線程的標準。
4、線程屬性
1)綁定屬性
??? Linux中采用“一對一”的線程機制,也就是一個用戶線程對應一個內核線程。綁定屬性就是指一個用戶線程固定地分配給一個內核線程,因為CPU時間片的調度是面向內核線程(也就是輕量級進程)的,因此具有綁定屬性的線程可以保證在需要的時候總有一個內核線程與之對應。而與之對應的非綁定屬性就是指用戶線程和內核線程的關系不是始終固定的,而是由系統來控制分配的。
2)分離屬性
??? 分離屬性是用來決定一個線程以什么樣的方式來終止自己。在非分離情況下,當一個線程結束時,它所占用的系統資源并沒有被釋放,也就是沒有真正的終止。只有當pthread_join()函數返回時,創建的線程才能釋放自己占用的系統資源。而在分離屬性情況下,一個線程結束時立即釋放它所占有的系統資源。這里要注意的一點是,如果設置一個線程的分離屬性,而這個線程運行又非常快,那么它很可能在pthread_create()函數返回之前就終止了,它終止以后還就可能將該線程號和系統資源移交給其他的線程使用,這可能會引起錯誤。
5、互斥量本質是一把鎖,提供對共享資源的保護訪問。
6、二進制信號量與互斥鎖的區別
1)mutex:誰獲得,誰釋放,而信號量可以由其他線程釋放。
2)mutex初始值為1,而信號量可0可1。
7、線程與輕進程
8、linux中使用進程實現線程,所以新創建的線程和源線程進程號可能不同。
總結
- 上一篇: 利率加点幅度1.57%是什么意思
- 下一篇: 花呗分期首期是本月还是下月 按照自己收