歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Ubuntu Linux——Native POSIX線程庫

Ubuntu Linux——Native POSIX線程庫

日期:2017/2/28 16:45:30   编辑:Linux教程

  在2.6版本以前發布的Linux內核中,Linux線程庫叫做LinuxThreads,為glibc2.0以後的GNU C庫所支持。該庫雖然使用了POSIX API,但是並不真正遵循POSIX標准。從2.6內核開始,Linux引入了NPTL。它比LinuxThreads在性能上有了很大的提高,也更遵循POSIX標准。但是,僅僅使用2.6內核並不等於使用了NPTL。盡管有些發行版會同時攜帶NPTL和LinuxThreads, 但所有現代的Linux發行版都缺省攜帶NPTL。

  用下面的命令可以查看你的Ubuntu系統上正在使用的POSIX實現:

  編輯請注意,該代碼中需要翻譯的內容為:

  (1)“This was returned from SUSE 9.1 installation”翻譯成“這是SUSE 9.1返回的結果”

  (2)“This was returned from Fedora 2.6.9-1.667 Instatllation”翻譯成“翻譯成“這是Fedora 2.6.9-1.667返回的結果”

  (3)“This was returned from an old RedHat installation” “翻譯成“這是一個老版本的RedHat返回的結果”

  $ getconf GNU_LIBPATHREAD_VERSION

  $ getconf GNU_LIBPATHREAD_VERSION

  $ getconf GNU_LIBPATHREAD_VERSION

  用下面的方法可以查看正在使用的Linux發行版是用什麼編譯工具編譯鏈接的。

  要找到/bin/ls鏈接的libpthreads庫,如下:

  (代碼)(P81倒數第14行)

  $ ldd /bin/ls |grep libc.so.6

  從上面的輸出內容可以看到,libc.so.6是和“Native POSIX Threads Library by Ulrich Drepper”一起鏈接的。

  NPTL實現了一對一的線程模型;也就是說,一個用戶線程對應一個內核線程。NPTL也實現了POSIX進程間的同步原語,而且線程選項PTHREAD_PROCESS_SHARED也被明確支持了。

  3.9.1 最大線程數

  在Linux上一個應用程序能夠創建的線程最大數量在不同的發行版上是不同的。運行在2個CPU 2GB內存上的SUSE9.1在pthread_create返回EAGAIN錯誤前允許創建16317個線程。EAGAIN錯誤的意思是說應用程序可能超過了系統的某些限制。該應用程序創建線程的棧大小為16384,這是創建線程時允許的最大棧大小。在把棧大小設置為16384前,該應用程序會在創建第1021個線程時失敗,並返回錯誤碼ENOMEM。任何情況下,8000到16000個線程已經足以滿足任何應用程序的需求。

  要在Linux上創建大數量的線程,需要先做下面的事情:

  1. 創建正確的棧大小(注釋17);

  2. 檢查ulimit(可以輸出內存、棧大小限制等的工具),修改對應項或編輯/etc/security/limits.conf文件。

  第4、5、6章更詳細的講述了POSIX線程的內容,以及它與NPTL的區別。

Copyright © Linux教程網 All Rights Reserved