Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1707498
  • 博文数量: 607
  • 博客积分: 10031
  • 博客等级: 上将
  • 技术积分: 6633
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-30 17:41
文章分类

全部博文(607)

文章存档

2011年(2)

2010年(15)

2009年(58)

2008年(172)

2007年(211)

2006年(149)

我的朋友

分类: LINUX

2007-11-28 15:56:25

Pthreads Primer

 

本书组织

C1: Introduction

C2: Concepts

C3: Foundation

C4: Lifecycle

C5: Scheduling

C6: Synchronization

C7: Complexities

C8: TSD

C9: Cancellation

C10: Signals

C11: Details

C12: Libraries

C13: Design

C14: Language

C15: Tools

C16: Performance

C17: Hardware

C18: example

本书只讨论pthread模型,它可用任何语言实现。

一个线程就是一个控制流,多现程之间共享一片内存,是在一个地址空间里遵循并发执行的一种方法。

SMP(share memory symmetric multiprocessors):共享内存对称多处理

MT可以充分利用SMP的硬件优势,特别是对于CPU密集型的应用。

MT的价值

       充分利用多处理器优势

       代替进程间通信

       增加响应率

       增加吞吐量

       简化实时处理

       简化信号处理

       充分利用系统资源

       。。。

共享内存可以做任何事,只是不好用和比较慢。


典型的多任务操作系统(Windows NT, UNIX等)中,
存在固有的划分:用户空间,内核空间.这一点已经被硬件强化了.对cpu来说,就有2个状态:用户态,核心态.
用户态下,允许运行通常的用户程序;
内核态下,跑的是IO指令,中断指令,虚拟内存管理指令,当然还有状态变更指令.
OS完全掌控IO,存储,处理器等,所以OS需要为每个任务维护数据.所以多任务也延伸到了内核空间.
OS采用trap机制来捕获对核心态操作的指示.




每个程序的状态可能互无关联.每个程序都独立地有1个栈,1个程序计数器,1个寄存器组.
这些程序1个时间点只能做1件事,这就是单个线程.
什么是线程呢?
线程是个抽象概念.它构成了计算机传统程序做的每一件事情.它是cpu调度的1个程序状态.如果说1个进程由数据,代码,内核状态,cpu寄存器组构成,那么线程就是由这些寄存器(程序计数器,通用寄存器,栈指针)的内容和堆栈构成.1个线程就是1个实时的计算状态.
线程有点类似进程,但进程是重量级的.进程结构所有部分都在核心空间,用户程序根无无法直接接触到.



线程是轻量级的,线程的结构在用户空间,可以被直接访问.
进程的所有线程共享相同的进程状态.他们驻留在相同的存储空间,看相同的数据,看相同的函数.当1个线程改变进程的变量,其他线程再次访问时也能看到改变.如果1个文件被1个线程打开,其他线程也能读这个文件.


内核交互Kernel Interaction
转向用户级的内核概念,系统调用怎么工作的,信号怎么被处理的,线程又是怎么被cpu调度的?

并发(Concurrency) vs 并行(Parallelism)
并发:多个线程(或传统进程)在同一时间执行,具体到1个时间点只能是其中1个在占用cpu.我们讲的多任务程序大多数情况指并发.
并行:在具体时间点有多个线程(或传统的进程)在跑.看起来1个CPU做不到并发?

系统调用
基本上就是采用trap机制实现的库函数.

同步
同步是多个线程协调彼此的一种方法,避免其中一个意外地改变另外1个线程用到的数据.这通过提供一些库函数做到,这些函数限制并发地访问某个数据的线程的个数.最简单的就是互斥锁.

调度
调度是把线程分配给cpu的方式.

线程标准
1.POSIX Threads
所有的主流UNIX都声称符合POSIX标准.
2.Win32
3.OS/2

这些OS的多线程标准不同于POSIX.不过有for Win32的POSIX自由库



阅读(822) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~