线程与线程机制的实现
来源:互联网 发布:mac wifi不能上网 编辑:程序博客网 时间:2024/05/21 18:30
线程的引入
为什么在进程中再派生线程?
三个理由
- 应用的需要
- 开销的考虑
- 性能的考虑
线程的基本概念
线程:进程中的一个运行实体,是CPU的调度单位
有时将线程称为轻量级进程
在同一进程增加了多个执行序列(线程)
线程的属性
- 有标示符ID
- 有状态及状态转换:需要提供一些操作
- 不运行时需要保存的上下文
有上下文环境:程序计数器等寄存器 - 有自己的栈和栈指针
- 共享所在进程的地址空间和其他资源
- 可以创建、撤销另一个线程
程序开始是以一个单线程进程方式运行的
线程机制的实现
- 用户级线程
- 核心级线程
- 混合——两者结合方法
用户级线程
- 在用户空间建立线程库:提供一组管理线程的过程
- 运行时系统:完成线程的管理工作(操作、线程表)
- 内核管理的还是进程,不知道线程的存在
- 线程切换不需要内核态特权
- 例子:UNIX
例子:POSIX线程库——PTHREAD
- POSIX(Portable Operating System Interface)
- 多线程编程接口,以线程库方式提供给用户
用户级线程小结
优点:
- 线程切换快
- 调度算法是应用程序特定的
- 用户级线程可运行在任何操作系统上(只需要实现线程库)
缺点:
- 内核只将处理器分配给进程,同一进程中的两个线程不能同时运行于两个处理器上
- 大多数系统调用是阻塞的,因此,由于内核阻塞进程,故进程中所有线程也被阻塞
核心级线程
- 内核管理所有线程管理,并向应用程序提供API接口
- 内核维护进程和线程的上下文
- 线程的切换需要内核支持
- 以线程为基础进行调度
- 例子:Windows
混合模型
- 线程创建在用户空间完成
- 线程调度等在核心态完成
- 例子:Solaris
多个用户级线程多路复用多个内核级线程
总结
进程
- 并发性 任何进程都可以与其他进程一起向前推进
- 动态性 进程是正在执行程序的实例
- 进程是动态产生、动态消亡的
- 进程在其生命周期内,在三种基本状态之间转换
- 独立性 进程是资源分配的一个独立单位
例如:各进程的地址空间相互独立 - 交互性 指进程在执行过程中可能与其他进程产生直接或间接的关系
- 异步性 每个进程都以其相对独立的、不可预知的速度向前推进
- 进程映像 程序+数据+栈(用户栈、内核栈)+PCB
线程
- 多线程应用场景
- 线程基本概念、属性
- 线程实现机制
可再入程序(可重入):
可被多个进程同时调用的程序,具有下列性质:
它是纯代码的,即在执行过程中自身不改变;
调用它的进程应该提供数据区
0 0
- 线程与线程机制的实现
- 线程池的使用与底层实现机制
- 进程与进程、线程与线程 的通信机制
- java 线程与进程 线程的实现 线程状态
- java如何实现线程的安全:线程的同步机制
- j2me的利用线程实现卖票机制
- AsyncTask机制实现线程之间的通信
- AtomicInteger线程安全的实现机制
- AtomicInteger线程安全的实现机制
- 组件与线程间的交互机制
- Servlet的多线程机制与线程安全
- Servlet的多线程机制与线程安全
- 进程与线程的同步机制
- 线程的等待与唤醒机制
- 线程的实现与注意事项
- 从头认识java-18.2 基本的线程机制(5)-守护线程与非守护线程
- 线程的同步机制
- js的线程机制
- 设计模式——职责链模式实现消费时间计算
- Hibernate的casecade与inverse探究
- 开篇之作
- hive文件存储格式
- 数组越界溢出利用--改写对象虚函数表
- 线程与线程机制的实现
- Mac ssh locahost Connection refused
- POJ题目1265 Area(PICK定理)
- Ubtuntu 14.04 下通过 apt-get 安装 JDK 7.0
- 4.18
- 【练习】面向对象系列(001)——泳池
- action接收请求参数
- PreparedStatement和Statement区别
- 如何从零开始学习C#