Zhigang Wang
  • Home
  • Blog
  • Wiki
  • LDP
  • Planet

Linux线程简介

Last modified on 2009-12-01

Linux下三种线程模型

  1. LinuxThreads
  2. 存在于Linux核心2.4及以前的版本中。用户态线程和核心态线程采用1:1模型。

  3. NPTL
  4. 存在于Linux核心2.6及以后的版本中。用户态线程和核心态线程采用1:1模型。

  5. NGPT
  6. 为Linux核心2.4开发,后来NPTL胜出,从而停止开发。用户态线程和核心态线程采用M:N模型。

线程相关工具

  • LD_ASSUME_KERNEL环境变量
  • LD_ASSUME_KERNEL=2.4.19:这会覆盖 NPTL 的实现。这种实现通常都表示使用标准的 LinuxThreads 模型,并启用浮动堆栈的特性。

    LD_ASSUME_KERNEL=2.2.5:这会覆盖 NPTL 的实现。这种实现通常都表示使用 LinuxThreads 模型,同时使用固定堆栈大小。

    我们可以使用下面的命令来设置这个变量:

    export LD_ASSUME_KERNEL=2.4.19
  • GNU_LIBPTHREAD_VERSION 宏
  • 部分现代 Linux 发行版都预装了 LinuxThreads 和 NPTL,因此它们提供了一种机制来在二者之间进行切换。要查看您的系统上正在使用的是哪个线程库,请运行下面的命令:

    $ getconf GNU_LIBPTHREAD_VERSION
    NPTL 2.5
    
  • 显示线程
  • 可以使用ps的“-m”选项来显示线程:

    $ ps -elm
    0 -   555 24900 24895  1   -   - - 116011 -     ?        02:13:15 firefox-bin
    0 S   555     -     -  1  75   0 -     - -      -        02:12:00 -
    1 S   555     -     -  0  75   0 -     - -      -        00:00:10 -
    1 S   555     -     -  0  75   0 -     - -      -        00:00:13 -
    1 S   555     -     -  0  78   0 -     - -      -        00:00:00 -
    1 S   555     -     -  0  83   0 -     - -      -        00:00:03 -
    1 S   555     -     -  0  75   0 -     - -      -        00:00:02 -
    

参考资料

  1. Linux 线程模型的比较:LinuxThreads 和 NPTL。
  2. The Native POSIX Thread Library for Linux (PDF) - Ulrich Drepper 和 Ingo Molnar 编写, 介绍了设计 NPTL 的原因和目标。
  3. Migrating apps to the 2.6 kernel and NPTL。
 

Categories

  • All contents
  • English contents
  • Chinese contents

Feeds

  • AtomAll contents
  • AtomEnglish contents
  • AtomChinese contents

Tags

  • gtd
  • syslog
  • twiki
  • virtualizaion
  • wiki
  • xen

Copyright © 2012 Zhigang Wang. Some right reserved.

The views expressed on this web site are my own and do not necessarily reflect the views of Oracle.