日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

Linux線程比較:LinuxThreads 和NPTL( 二 )


;根據(jù) LinuxThreads 的設(shè)計,如果一個異步信號被發(fā)送了,那么管理線程就會將這個信號發(fā)送給一個線程 。如果這個線程現(xiàn)在阻塞了這個信號,那么這個信號也就會被掛起 。這是因為管理線程無法將這個信號發(fā)送給進(jìn)程;相反,每個線程都是作為一個進(jìn)程在執(zhí)行 。
;線程之間的調(diào)度是由內(nèi)核調(diào)度器來處理的 。LinuxThreads 及其局限性
LinuxThreads 的設(shè)計通常都可以很好地工作;但是在壓力很大的應(yīng)用程序中,它的性能、可伸縮性和可用性都會存在問題 。下面讓我們來看一下 LinuxThreads 設(shè)計的一些局限性:
它使用管理線程來創(chuàng)建線程,并對每個進(jìn)程所擁有的所有線程進(jìn)行協(xié)調(diào) 。這增加了創(chuàng)建和銷毀線程所需要的開銷 。
;由于它是圍繞一個管理線程來設(shè)計的,因此會導(dǎo)致很多的上下文切換的開銷,這可能會妨礙系統(tǒng)的可伸縮性和性能 。
;由于管理線程只能在一個 CPU 上運(yùn)行,因此所執(zhí)行的同步操作在 SMP 或 NUMA 系統(tǒng)上可能會產(chǎn)生可伸縮性的問題 。
;由于線程的管理方式,以及每個線程都使用了一個不同的進(jìn)程 ID,因此 LinuxThreads 與其他與 POSIX 相關(guān)的線程庫并不兼容 。
;信號用來實現(xiàn)同步原語,這會影響操作的響應(yīng)時間 。另外,將信號發(fā)送到主進(jìn)程的概念也并不存在 。因此,這并不遵守 POSIX 中處理信號的方法 。
;LinuxThreads 中對信號的處理是按照每線程的原則建立的,而不是按照每進(jìn)程的原則建立的,這是因為每個線程都有一個獨立的進(jìn)程 ID 。由于信號被發(fā)送給了一個專用的線程,因此信號是串行化的 ―― 也就是說,信號是透過這個線程再傳遞給其他線程的 。這與 POSIX 標(biāo)準(zhǔn)對線程進(jìn)行并行處理的要求形成了鮮明的對比 。例如,在 LinuxThreads 中,通過 kill() 所發(fā)送的信號被傳遞到一些單獨的線程,而不是集中整體進(jìn)行處理 。這意味著如果有線程阻塞了這個信號,那么 LinuxThreads 就只能對這個線程進(jìn)行排隊,并在線程開放這個信號時在執(zhí)行處理,而不是像其他沒有阻塞信號的線程中一樣立即處理這個信號 。
;由于 LinuxThreads 中的每個線程都是一個進(jìn)程,因此用戶和組 ID 的信息可能對單個進(jìn)程中的所有線程來說都不是通用的 。例如,一個多線程的 setuid()/setgid() 進(jìn)程對于不同的線程來說可能都是不同的 。
;有一些情況下,所創(chuàng)建的多線程核心轉(zhuǎn)儲中并沒有包含所有的線程信息 。同樣,這種行為也是每個線程都是一個進(jìn)程這個事實所導(dǎo)致的結(jié)果 。如果任何線程發(fā)生了問題,我們在系統(tǒng)的核心文件中只能看到這個線程的信息 。不過,這種行為主要適用于早期版本的 LinuxThreads 實現(xiàn) 。
;由于每個線程都是一個單獨的進(jìn)程,因此 /proc 目錄中會充滿眾多的進(jìn)程項,而這實際上應(yīng)該是線程 。
;由于每個線程都是一個進(jìn)程,因此對每個應(yīng)用程序只能創(chuàng)建有限數(shù)目的線程 。例如,在 IA32 系統(tǒng)上,可用進(jìn)程總數(shù) ―― 也就是可以創(chuàng)建的線程總數(shù) ―― 是 4,090 。
;由于計算線程本地數(shù)據(jù)的方法是基于堆棧地址的位置的,因此對于這些數(shù)據(jù)的訪問速度都很慢 。另外一個缺點是用戶無法可信地指定堆棧的大小,因為用戶可能會意外地將堆棧地址映射到本來要為其他目的所使用的區(qū)域上了 。按需增長(grow on demand) 的概念(也稱為浮動堆棧 的概念)是在 2.4.10 版本的 Linux 內(nèi)核中實現(xiàn)的 。在此之前,LinuxThreads 使用的是固定堆棧 。關(guān)于 NPTL
NPTL,或稱為 Native POSIX Thread Library,是 Linux 線程的一個新實現(xiàn),它克服了 LinuxThreads 的缺點,同時也符合 POSIX 的需求 。與 LinuxThreads 相比,它在性能和穩(wěn)定性方面都提供了重大的改進(jìn) 。與 LinuxThreads 一樣,NPTL 也實現(xiàn)了一對一的模型 。

推薦閱讀