转自:tanghui19900420作者。线程理论基础

来源:互联网 发布:英菲克网络机顶盒价格 编辑:程序博客网 时间:2024/06/05 00:47

说明:只供学习交流,转载请注明出处

 

一,线程的基本概念

线程,也被称为轻量进程,指的是进程中某个单一顺序的控制流。线程是进程的实体,一个进程可以拥有多个线程,而一个线程必须有一个父进程。线程与父进程的其他线程一起共享进程的所有资源。线程本身不拥有系统资源,只是拥有一些运行必须的数据结构而已。在多处理器系统里,不同线程可以同时运行在不同的中央处理器上。进程是资源管理的最小单位,而线程是程序执行的最小单位(或者说进程是资源分配的最小单位,线程是调度的最小单位)。大多数支持多处理器的操作系统都提供编程接口,使得进程可以控制自己的线程和各处理器的关联度。

 

二,线程分类

根据线程的调度者是位于系统内核中还是位于系统内核外,线程可以划分为内核态线程和用户态线程两大类:

1,内核态线程

该线程由内核调度程序直接调度,在核心态下可以充分发挥多处理机的优势。目前,Linux系统的标准线程库就是采用内核线程方式实现多线程。内核线程可以充分发挥多处理器的性能。

2,用户态线程

一个进程可以包含几个线程。这些线程从内核调度程序的视角来看只是一个进程,内核将它们作为一个进程来调度。线程之间的调度是在用户态下进行的。实际上,线程对于内核调度程序而言是不可见的。用户线程的优点是调度的高效性,缺点是在多处理器上的性能不高,一个线程的系统调用阻塞将导致整个线程组阻塞。目前,线程主要的实现方法是用户态线程。与内核态线程不同,用户态线程在线程切换时不需要调用系统调用。因此,资源消耗较小,有利于实现一个进程启动多个线程的场合。同时,通过修改用户态线程的实现方式可以适应特殊应用要求,这对于多媒体实时处理尤为有利。

 

三,多线程的优点

优势一:和进程相比,它是一种非常“节俭”的多任务操作方式。在linux系统下,启动一个新的进程必须分配给它独立的址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种"昂贵"的多任务工作方式。

运行于一个进程中的多个线程,它们之间使用相同的地址空间,而且线程间彼此切换所需的时间也远远小于进程间切换所需要的时间。据统计,一个进程的开销大约是一个

线程开销的30倍左右。

 

使用多线程的理由之二是:

线程间方便的通信机制。对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过进程间通信的方式进行,这种方式不仅费时,而且很不方便。线程则不然,由于同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其它线程所用,这不仅快捷,而且方便。

 

除了以上所说的优点外,多线程程序作为一种多任务、并发

的工作方式,有如下优点:

1):使多CPU系统更加有效。操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上。

 

2):改善程序结构。一个既长又复杂的进程可以考虑分多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。

 

 

说明:Linux系统下的多线程遵循POSIX线程接口,称为pthread。编写Linux下的多线程程序,需要使用头文件pthread.h,连接时需要使用库libpthread.a

 

总结:

1):进程是资源分配的最小单位,而线程是调度的最小单位。

2):进程有独立的地址空间,用于自己的代码段、数据段和堆栈段,而线程只有独立的堆栈段。

3):进程拥有多种通讯方式,线程之间通信通常只有通过全局变量或在创建是传值。

 

原创粉丝点击