操作系统线程相关知识学习
2016-04-09 15:04
253 查看
一、线程的引入
进程中引入线程的三个原因:应用的需要:
三个线程的字处理软件:一个负责键盘的输入;一个负责排版;一个负责保存。
典型的应用: Web服务器:
工作方式:
1.从客户端接收网页的请求(Http协议)
2.从磁盘上检索相关网页,读入内存
3.将网页返回给对应的客户端。
构造服务器的三种方法:
模型 | 特性 |
多线程 | 有并发、阻塞系统调用 |
单线程进程 | 无并发、阻塞系统调用 |
有限状态机 | 有并发、非阻塞系统调用、中断 |
进程的相关操作:时间、空间开销大,限制了并发度提高
线程的开销小(创建和撤销一个线程花费时间少,两个线程切换花费的时间少;线程之间相互通信无需调用内核(同意进程内的线程共享内存和文件))
性能的考虑
二、线程的基本概念
1. 进程的两个基本单位资源的拥有者:进程还是资源的拥有者
COU调度单位:线程继承了这一属性
线程:进程中的一个运行实体,是CPU的调度单位,有时将线程称之为轻量级的进程。
其实就是在同一进程中增加了多个执行序列(线程)
2. 线程的属性
有标识符的ID有状态及状态转换--需要提供一些操作
不运行时需要保存的上下文: 有上下文环境包括程序计数器等寄存器
有自己的栈和栈指针
共享所在进程的地址空间和其他资源
可以创建和撤销另一个线程: 其实程序开始时以一个单线程的进程方式运行的
三、线程机制的实现
1.线程的实现
用户级线程核心级线程
混合-两者结合的方法
1.1 用户级线程
在用户空间建立线程库:提供一组管理线程的过程
运行时系统(Run-time system):完成线程的管理工作(操作线程表)
内核管理的还是进程,不知道线程的存在
线程切换不需要内核态特权
例如 UNIX: POSIX线程库---PTHREAD
POSIX(Porttable Operating System Interface)
多线程编程接口,以线程库方式提供给用户(Pthread_create,Pthread_exit,Pthread_join,Pthread_yield,Pthread_attr_init,Pthread_attr_destory)
Pthread_yield函数表示该线程自愿让出CPU。
用户级线程的优缺点:
优点:
线程切换快
调度算法是应用程序特定的
用户级线程可运行在任何操作系统上(只需要实现线程库)
缺点:
内核只将处理器分配给进程。同一进程中两个线程不能同时运行于两个处理器上
大多数系统调用是阻塞的,因此,由于内核阻塞进程,故进程中所有线程也被阻塞
1.2 核心级线程
内核管理所有线程管理,并向应用程序提供API接口
内核维护进程和线程的上下文
线程的切换需要内核的支持
以线程为单位进行调度
例如 windows
1.3 混合模型
线程的创建在用户空间完成
线程的调度等在和心态完成
例如 Solaris
其实就是多个用户级线程多路复用多个内核级线程
1.4 一个概念
可再入程序(可重入):可被多个进程同时复用的程序,具有一下性质:
它是纯代码的,即在执行过程中自身不噶边;
调用它的进程应该提供数据区
相关文章推荐
- 应用领航:盘点那些年我们一起追过的OS
- 无奇不有!盘点各国自己开发的操作系统
- C#线程间不能调用剪切板的解决方法
- 可自定义oem的萝卜家园 Ghost XP 新春装机版 V200801 下载
- C#线程同步的三类情景分析
- C#获取进程或线程相关信息的方法
- C#停止线程的方法
- C#子线程更新UI控件的方法实例总结
- C#线程队列用法实例分析
- C#实现判断操作系统是否为Win8以上版本
- C++使用CriticalSection实现线程同步实例
- 基于C++实现的线程休眠代码
- VB读取线程、句柄及写入内存的API代码实例
- C#网络编程基础之进程和线程详解
- C#通过Semaphore类控制线程队列的方法
- C#多线程处理多个队列数据的方法
- C#实现线程安全的简易日志记录方法
- C#中线程同步对象的方法分析
- js获取本机操作系统类型的两种方法
- ASP.NET线程相关配置