-
线程引入原因:
性能方面:操作进程系统开销大;
应用需求:进程代码并发执行的需求;
硬件支持:多核处理器,加速进程的运行; -
线程:
可在cpu上运行的基本执行单位;
进程内的一个代码片段可以被创建称为一个线程;
线程状态:就绪、运行、等待等;
线程操作:创建、撤销、等待、唤醒等;
进程依旧是资源分配的基本单位;
线程自己不拥有系统资源,通过进程申请资源; -
传统进程:
重型进程;
只有一个线程:主线程;
单线程模型; -
线程的结构:
代码和数据:来自进程;
各类资源:来自进程;
线程控制块(TCB):线程ID,程序计数器PC,寄存器集,栈空间; -
单线程:一个进程只有一个线程。如早期的操作系统;
多线程:一个进程有多个线程。需要支持线程的操作系统; -
线程优点:
响应度高:线程创建开销小,如web服务器;
资源共享:进程中的线程可以共享进程资源;
经济性:线程创建、上下文切换比进程快;
MP体系结构的运用:一个线程中的进程在不同处理器上并行运行; -
linux线程:
linux 2.2版引入线程;
通过clone()系统调用创建线程:类似fork,linux只支持克隆线程;
用术语“任务”表示进程和线程,一般不用“线程”;
用户线程:PThreads; -
Clone可创建进程或者线程
-
用户(管理)线程:由用户线程库进行管理的线程:
内核看不到用户线程;
用户线程的创建和调度在用户空间中,不需要内核的干预;
应用于传统的只支持进程的操作系统;
例子:POSIX Pthreads;Win32 threads;Java threads -
内核(管理)线程:内核进行管理的线程:
需要内核支持;
由内核完成线程调度;
由内核进行创建和撤销;
例子:Windows XP/2000;Solaris;Linux;Tru64 UNIX;Mac OS X; -
多线程模型:多对一模型;一对一模型;多对多模型;
-
多对一模型:
不支持内核线程的操作系统:内核只有进程;
内核只能看到一个进程:多个进程不能并行运行在多个处理器上;
进程中的用户线程由进程自己管理:进程内线程切换不会导致进程切换;一个线程的系统调用会导致整个进程阻塞; -
一对一模型:
用于支持线程的操作系统:用户线程映射到内核线程;操作系统管理这些线程;
并发性好:多个线程可并发运行在多个处理器上;
内核开销大;
如Windows;OS/2; -
多对多模型:
多个用户线程映射为相等或更小数目的内核线程:并发性和效率兼顾;增加复杂度;
例子 :Solaris 9 以前的版本; -
线程库:
为程序员提供API来创建和管理线程;
两种模式:
用户库(用户线程):存在于用户空间;没有内核支持;调用线程库不会产生系统调用;
内核库(内核线程):存在于内核;操作系统支持;调用线程库会产生系统调用; -
Pthreads线程库:
线程的POSIX标准;
定义了创建和操纵线程的一整套API;
用在类Unix操作系统(Unix,Linux,Mac OS X等);
Windows也有移植版pthreads-win32;
一般多为用户线程; -
Java线程库:
Java线程由JAVA虚拟机JVM管理:
JAVA线程操作系统不可见;
用户线程;
定义了创建和操纵线程的一整套API;
跨操作系统平台; -
Win32线程库:
win32线程库是内核库;
内核线程;
操作系统学习笔记四.线程
最新推荐文章于 2023-07-12 13:31:14 发布