Linux Concurrent Programming —— Thread【Beta1-Updating】

                                     Linux Concurrent Programming —— Thread


                                                                                                                                             ——by firo 2011.4.26

Reference

Google

man  7 pthreads

Professional Linux Kernel Architecture【PLKA】

Understanding The Linux Kernel 3e 【ULK 3e】

Computer Systems: A Programmer‘s Perspective 2e【CS:APP 2e】

Advanced Programming in the Unix Environment Second Edition 【APUE 2e】

Unix Network Programming The Sockets Networking API VOLUME 1 Third Edition【UNPv1 3e】

The Linux Programming inTerface A Linux and UNIX System Programming Handbook 【TLPI】

Thread Implementation Models——线程实现模型

What is the Kernel Scheduling Entities (KSE)?

Kernel Scheduling Entities内核调度实体。

“A kernel scheduling entity (KSE) is a “virtual CPU” granted to the process for the purpose of executing threads.  A thread that is currently executing is always associated with exactly one KSE, whether executing in user space or in the kernel.”(摘自Free BSD man手册)

KSE——虚拟的CPU,使得进程可以执行多个线程;正在执行的线程,无论它是在用户模式还是内核模式,它总是和一个确定的KSE相关联。

TLPI中关于KSE的描述:kernel分配CPU和其他系统资源给KSE。

Many-to-one (M:1) implementations (user-level threads)

关于线程的实现的所有操作(Many):线程创建,结束,Mutex同步,Condition variabled等等都由库(1)来实现。

优点:【1】因为不涉及System call,所有的操作也就非常的快啦~~【2】不需要内核支持,所以移植性非常高,除DOS那一辈的都行~

缺点:【1】你也不能总在用户模式执行吧,所以问题来了,当你执行一个System call时,好家伙,Context switch上下文切换到了kernel模式了,User-level的所有操作都Stop了,甭管你有多少个线程全停——谁叫你是User-level用户模式的,性能损耗不言自明。【2】kernel无法识别到这些用户级的Thread,所以kernel就不能切换他们了,分配他们倒不同的核上了(多核CPU),也无法调整线程的优先级,这些都由库来包办了,显然不是全局最优~~

One-to-one (1:1) implementations (kernel-level threads)

每一个Thread对应一个KSE,所有线程操作自然有内核提供了——System call。

优点:【1】不会出现User-level的一个系统调用阻塞掉所有的其他Thread。【2】实现了全局调度最优~

缺点:【1】因为都是System call 自然就慢下来,why?Context switch呀。【2】对于高性能的服务器来说,上百万的Thread同时对应着kernel需要维护上百万的KSE,这回带来性能损耗的。

Linux的线程实现就是这种~

Many-to-many (M:N) implementations (two-level model)

一个进程可以关联多个KSE,多个线程可以映射到一个KSE。

优点【1】见M:1和1:1模型【2】kernel交叉的分配线程给多核CPU。

缺点【1】见M:1和1:1模型【2】Complexity!调度和信息的传递同时涉及到Kernel-level和user-level Thread了~~

Linux Implementations of POSIX Threads——POSIX线程的Linux版实现

Next Generation POSIX Threads (NGPT)

基于M:N模型的linux线程库,由IBM开发。性能介于LinuxThreads和NPTL,03年终止开发了~~

Linux Threads

Linux的一代功臣,2.6之前的kernel使用的线程库,由Xavier Leroy开发的~~大致的实现过程是:通过clone系统调用,参数CLONE_VM | CLONE_FILES | CLONE_FS | CLONE_SIGHAND 分别用来指明共享创建者的VM虚拟内存(用户空间)、文件描述符、文件系统相关属性(umask,root directory等)、信号处理程序表和阻塞信号表和挂起信号表。kernel创建一个Manager Thread管理所有线程创建与结束等。实现内部使用real-time 实时Singal用来传递操作信息。另外,Linux Threads 与标准差异参见TLPI-33.5.1,这也是它被NPTL取代的原因。

 

NPTL (Native POSIX Threads Library)

Kernel2.6沿用至今,Linux Threads的继承者,有

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值