維基百科,自由的百科全書(shū)
Native POSIX Thread Library(NPTL)是一個(gè)能夠使使用POSIX Threads編寫(xiě)的程序在Linux內(nèi)核上更有效地運(yùn)行的軟件。
測(cè)試表明,NPTL能夠成功地在IA-32平臺(tái)上在兩秒種內(nèi)生成100,000個(gè)線程;相應(yīng)的沒(méi)有NPTL的內(nèi)核將耗費(fèi)15分鐘左右。
歷史在Linux內(nèi)核2.6出現(xiàn)之前進(jìn)程是(最小)可調(diào)度的對(duì)象,當(dāng)時(shí)的Linux不真正支持線程。但是Linux內(nèi)核有一個(gè)系統(tǒng)調(diào)用指令clone(),這個(gè)指令產(chǎn)生一個(gè)呼叫調(diào)用的進(jìn)程的復(fù)件,而且這個(gè)復(fù)件與原進(jìn)程使用同一地址空間。LinuxThreads計(jì)劃使用這個(gè)系統(tǒng)調(diào)用來(lái)提供一個(gè)內(nèi)核級(jí)的線程支持。但是這個(gè)解決方法與真正的POSIX標(biāo)準(zhǔn)有一些不相容的地方,尤其是在信號(hào)處理、進(jìn)程調(diào)度和進(jìn)程間同步原語(yǔ)方面。
要提高LinuxThreads的效應(yīng)很明顯需要提供內(nèi)核支持以及必須重寫(xiě)線程函式庫(kù)。為了解決這個(gè)問(wèn)題出現(xiàn)了兩個(gè)互相競(jìng)爭(zhēng)的項(xiàng)目:一個(gè)IBM的組的項(xiàng)目叫做NGPT(Next Generation POSIX Threads,下一代POSIX線程),另一個(gè)組是由Red Hat程序員組成的。2003年中NGPT被放棄,幾乎與此同時(shí)NPTL公布了。
NPTL首次是隨Red Hat Linux 9發(fā)表的。此前老式的Linux POSIX線程偶爾會(huì)發(fā)生系統(tǒng)無(wú)法產(chǎn)生線程的毛病,這個(gè)毛病的原因是因?yàn)樵谛戮€程開(kāi)始的時(shí)候系統(tǒng)沒(méi)有借機(jī)先占。當(dāng)時(shí)的Windows系統(tǒng)對(duì)這個(gè)問(wèn)題的解決比較好。Red Hat在關(guān)于Red Hat Linux 9上的Java的網(wǎng)頁(yè)上發(fā)表了一篇文章稱NPTL解決了這個(gè)問(wèn)題。
從第3版開(kāi)始NPTL是Red Hat Enterprise Linux的一部分,從Linux內(nèi)核2.6開(kāi)始它被納入內(nèi)核。目前它完全被結(jié)合入GNU C 函式庫(kù)。
設(shè)計(jì)NPTL的解決方法與LinuxThreads類似,內(nèi)核看到的首要抽象依然是一個(gè)進(jìn)程,新線程是通過(guò)clone()系統(tǒng)調(diào)用產(chǎn)生的。但是NPTL需要特殊的內(nèi)核支持來(lái)解決同步的原始類型之間互相競(jìng)爭(zhēng)的狀況。在這種情況下線程必須能夠入眠和再?gòu)?fù)蘇。用來(lái)完成這個(gè)任務(wù)的原始類型叫做futex。
NPTL是一個(gè)所謂的1×1線程函式庫(kù)。用戶產(chǎn)生的線程與內(nèi)核能夠分配的物件之間的聯(lián)系是一對(duì)一的。這是所有線程程式中最簡(jiǎn)單的。
轉(zhuǎn)自http://zh.wikipedia.org/wiki/Native_POSIX_Thread_Library#cite_note-1
轉(zhuǎn)自:http://blog.chinaunix.net/uid-20556054-id-3068071.html