多进程与多线程(七)
来源:互联网 发布:软件技术部管理制度 编辑:程序博客网 时间:2024/05/22 06:10
2 线程
线程,何为线程?
其实,线程[1]没有明确的定义。我们只能通过描述和特性解释的方式来说说线程。
首先,线程比进程“小”。这个“小”包含几个层面的含义:一,“辈分”低,线程隶属于进程,被进程创建。二,“体积”小,线程不是独立体,不象进程一样拥有动态堆、静态数据、程序代码等部分,线程只是在进程空间内,可以拥有自己独立的寄存器和堆栈而已[2]。三,“开销”小,操作系统对于进程的创建比进程的创建要更为费时费力。
其次,线程比进程“快”。快,有两层含义:一是利用并行,执行快。二是切换快,进程因有自己独立的虚地址空间,进程间切换时,操作系统必须交换不同进程的地址空间,使得退出执行态的进程地址被保存,进入执行态的进程地址空间被操作系统可见。而多线程因共享相同的地址空间,故节省了耗时的进程地址空间切换。
线程同进程一样,有各种状态,如新建、可运行、阻塞/挂起、终止等,以标识线程在生命期中的不同状态,以反映其在操作系统下被调度的情形。
线程间通常也需要通信,但却就没有共享内存、信号等手段可用了,可是,线程间通信却比进程间通信方便许多,这是因为线程间共享着进程的地址空间。线程共享进程地址空间,意味着隶属进程的变量(变量的实质是进程的部分空间,变量名是部分进程空间的被命了名的地址)可能被线程共享,也可能被线程独享,由此,引发了掌握线程的两个主要问题:一是线程安全;另一个是TLS,thread local storage,线程本地存储。
[1] 与进程一样,线程在操作系统中也有个类似PCB的东西,称为线程属性对象(thread attributes object,用以描述线程属性对象),这个线程属性对象被操作系统掌握,用以控制、调度线程。
[2] 实际上,线程概念的产生,是思维细化的结果,这种思维方式就是解耦——把进程所占资源与进程中的运行代码相分离——这种分离的结果,就产生了线程,即,线程使得在一个进程地址空间中可以运行多个指令流,这样,多个指令流就可以利用多核或多处理机(SMP)得以并行执行,从而提高并发度。
- 多进程与多线程(七)
- 多进程与多线程(七)--多线程效率(转)
- 多线程与多进程
- 多线程与多进程
- 多线程与多进程
- 多线程与多进程
- 多进程与多线程
- 多进程与多线程
- 多进程与多线程
- 多线程与多进程
- 多进程与多线程
- 多进程与多线程
- 多线程与多进程
- 多进程与多线程
- 多进程与多线程
- 多线程与多进程
- 多进程与多线程
- 多进程与多线程
- 在VS2008下使用OpenCV2.3链接imshow出错--解决,高版本路径放低版本前面
- 十月三个人
- [下载]Visual Studio 11开发者预览版
- ARM编程进阶之一 —— ARM汇编伪指令
- 关于ANDROID网络的类库
- 多进程与多线程(七)
- 秋叶推荐与点评:《P道理-ERP项目实施手记》
- ORACLE PL/SQL编程之:把触发器说透
- sun.misc.Unsafe实例介绍
- ARM编程进阶之二 —— ATPCS与混合编程
- Android进程间通讯之初见(IPC,RPC,LPC,BINDER,AIDL..)
- java实现插入排序
- 关于Oracle数据和对象的导入导出
- 有点纠结