欢迎来到天天文库
浏览记录
ID:27572950
大小:105.00 KB
页数:9页
时间:2018-12-04
《linux线程基础》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、Linux系统下的多线程编程1.1引言线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在8()年代屮期,Solaris是这方而的佼佼者。传统的Unix也支持线程的概念,但是在一个进程(process)中只允许有一个线程,这样多线程就意味着多进程。现在,多线程技术己经被许多操作系统所支持,包括Windows/NT,当然,也包括Linux。为什么有了进程的概念后,还要再引入线程呢?使用多线程到底有哪些好处?什么的系统应该选用多线程?我们首先必须回答这些问题。1.2使用多线程的理由一是和进程相比,它是一种非常"节俭”的多任务操作方
2、式。进程是系统中程序执行和资源分配的基本单位。我们知道,在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这就导致了进程在进行切换等操作起到了现场保护作用,这是一种"昂贵"的多任务工作方式。但是为了进一步减少处理机的空转时间支持多处理器和减少上下文切挽开销,进程演化中出现了另外一个概念,这就是线程,也被人称为轻S级的进程。它是一个进程内的基本调度单位。线程是在共亨的内存空间中并发的多道执行路径,它们共亨一个进程的资源,比如文件描述符和信号处理等。因此,大大减少了上下文切换的开销。而运行于一个进
3、程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间彼此切换所需的时间也远远小于进程间切挽所需要的时间。二是线程间方便的通信机制。对不同进程來说,它们具有独立的数据空间,要进行数据的传递只能通过通信的方式进行,这种方式不仅费时,而且很不方便。线程则不然,由于同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其它线程所用,这不仅快捷,而且方便。当然,数据的共享也带來其他一些H题,有的变量不能同时被两个线程所修改,有的子程序中声明为static的数据更有可能给多线程程
4、序带来灾难性的打击,这些正是编写多线程程序时最需要注意的地方。除了以上所说的优点外,不和进程比较,多线程程序作为一种多任务、并发的工作方式,当然有以下的优点:1)提岛应用程序响应。这对阁形界而的程序尤其有意义,当一个操作耗时很长时,整个系统都会等待这个操作,此时程序不会响应键盘、鼠标、菜单的操作,而使用多线程技术,将耗时长的操作(timeconsuming)置于一个新的线程,可以避免这种尴尬的情况。2)使多CPU系统更加有效。操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上。3)改善程序结构。一个既长又复杂的进程可以考虑分为多个线程
5、,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。1.3进程和线程可执行文件由指令和数据组成。进程就是在计算机上运行的可执行文件针对特定的输入数据的一个实例,同一个可执行程序文件如果操作不同的输入数据就是两个不同的进程。线程是进程的一条执行路径,它包含独立的堆栈和CPU寄存器状态,每个线程共享其所附属的进程的所有的资源,包括打开的文件、页表(因此也就共享整个用户态地址空间)、信号标识及动态分配的A存等等。线程和进程的关系是:线程是属于进程的,线程运行在进程空间闪,同一进程所产生的线程共亨同-•物理内存空间,当进程退山吋该进程所产生的线程都会被强
6、制退出并清除。Linux在核外采用1:1线程模型,即用一个核心进程(轻量进程)对应一个线程,将线程调度等同于进程调度,交给核心完成,而其它诸如线程取消、线程间的同步等工作,都是在核外线程库屮完成的。因此可以把进程看作一组线程,这组线程拥有相同的线程组号(TGID),这个TGID就是这组线程序所附属的进程的ID号,每个线程的ID号就是我们用ps命令所看到的LWP号。为了方便,从现在起我们川任务來代替进程和线程,即每提到任务,我们就是指线程和进程,除非要强调线程和进程之间的不同之处。任务的周期从被fork开始一直到给任务从进程表屮消失。一个进程包括:正文段(t
7、ext),数据段(data),栈段(STACK)和共享内存段(SHAREDMEMORY)o线程跟进程一样,都拥有一张控制表,线程将相关的变量值放在线程控制表中。一个进程可以拥有一个或者一个以上的线程,也就是有多个线程控制表和堆找寄存器。但是它们是共享一个A存空间的,这就导致了每个线程的操作都会影响到其他线程。所以线程的同步是非常重要的。线程可分为用户级线程和核心级线程。(1)用户级线程主要是解决上下问切换的问题,它的调度算法和调度过程都是用户自己选择决定的,在运行时并不需要特定的闪核支持,操作系统都会提供一个库函数,包括对线程的创建、调度、撤锁的等功能。而
8、内核仍然度进程进行管理。如果-个进程中的一个线程调川了阻塞的系统调
此文档下载收益归作者所有