线程管理
来源:互联网 发布:投资网络 编辑:程序博客网 时间:2024/05/16 19:10
一,线程的基本概念
线程是一个轻量级的进程,引入线程的目的就是为了提高系统的并发性。在传统的操作系统中进程拥有两个基本的属性:一是拥有资源的独立单位;二是可独立调度与分配的独立单位。由于进程是资源的拥有者,因而在创建、撤销、切换中,系统必须为之付出较大的时空开销,引入线程的目的就是为了解决这个问题。
二,线程的属性
1,轻型实体,线程实体基本上不拥有资源。
2,独立调度和分派的基本单位。
3,可并发执行,在一个进程中的多个线程之间可以并发执行。
4,共享进程资源,在一个进程中的多个线程可以共享进程的资源。
三,线程与进程的比较
下面从不同的角度对进程与线程进行比较
1,调度
在传统的操作系统中,作为拥有资源与独立调度的基本单位都是进程。而在引入线程的操作系统中,把线程作为独立调度的基本单位,而进程作为拥有资源的基本单位,把传统的进程的两个属性分开,使线程基本上不拥有资源,使线程轻装上阵,显著的提高系统的并发性。
2,并发性
在引入线程的操作系统中,不仅进程之间可以并发执行,而且在一个进程的多个线程之间也可以并发执行,使操作系统拥有更高的并发性,提高系统资源的利用率与系统的吞吐量。
3,拥有资源
无论是传统的操作系统还是引入线程的操作系统,进程都是拥有资源的基本单位。一般而言线程自己不拥有系统资源,但它可以访问其所属线程的系统资源。
4,系统开销
在创建或撤销进程时,都要为其创建和回收进程控制块,分配或回收资源,操作系统所付出的开销明显大于线程创建或撤销的开销。此外,一个进程中的多个线程具有相同的地址空间,在同步与通信实现起来线程比进程容易。
5,地址空间
每个进程有自己独立的地址空间,线程之间没有独立的地址空间。
四,线程通信与同步
1,线程通信
(1),使用全局变量进行通信
属于同一个进程的多个个线程共享该进程的资源,故解决线程间通信最简单的一种方法是使用全局变量。对于标准类型的全局变量,我们建议使用volatile 修饰符,它告诉编译器无需对该变量作任何的优化,即无需将它放到一个寄存器中,并且该值可被外部改变。如果线程间所需传递的信息较复杂,我们可以定义一个结构,通过传递指向该结构的指针进行传递信息。
(2),使用自定义消息进行通信
我们可以在一个线程中向另一个线程发送自定义的消息来达到通信的目的。一个线程向另外一个线程发送消息是通过操作系统实现的。利用Windows操作系统的消息驱动机制,当一个线程发出一条消息时,操作系统首先接收到该消息,然后把该消息转发给目标线程,接收消息的线程必须已经建立了消息循环。
2,线程同步
(1),互斥锁。
(2),信号量机制。
- 线程管理
- 线程管理
- 线程管理
- 线程管理
- 线程管理
- 线程管理
- 线程管理
- 线程管理
- 线程管理
- 线程管理
- 管理线程的线程池
- 管理线程之创建线程
- 管理线程之创建线程
- 【高级线程管理】线程池
- java线程状态管理
- Linux 进程管理--------------------线程
- Win2Linux 线程管理映射
- ACE_Thread_Manager线程管理学习
- 【Leetcode】69. Sqrt(x) 【溢出?如何防止?】
- mysql commit和rollback
- Linux shell脚本变量单引号和双引号的区别以及变量扩展问题
- POJ
- 算法之二分查找(java版实现加测试)
- 线程管理
- 集合相关问题整理
- ios 分类(category)和类扩展(extension)详解
- Cesium学习笔记(七):Demo学习(自由控制飞行的飞机)
- 解析C语言结构体、位段
- 深度学习系列(1)——初探GAN和W-GAN
- BZOJ 2330 [SCOI2011]糖果 差分约束系统
- linux mysql压缩备份与还原的shell脚本
- spring-boot学习笔记3