线程和进程在很多方面是相似的。相同点主要表现在如下几方面:
1) 比如都具有ID,一组寄存器,状态,优先级以及所要遵循的调度策略。
2) 每个进程都有一个进程控制块,线程也拥有一个线程控制块(在Linux内核,线程控制块与进程控制块用同一个结构体描述,即struct task_struct),这个控制块包含线程的一些属性信息,操作系统使用这些属性信息来描述线程。
3) 线程和子进程共享父进程中的资源。
4) 线程和子进程独立于它们的父进程,竞争使用处理器资源。
5) 线程和子进程的创建者可以在线程和子进程上实行某些控制,比如,创建者可以取消、挂起、继续和修改线程和子进程的优先级。
6) 线程和子进程可以改变其属性并创建新的资源
除了这些相同点,在很多方面也存在着差异:
1) 主要区别:每个进程都拥有自己的地址空间,但线程没有自己独立的地址空间,而是运行在一个进程里的所有线程共享该进程的整个虚拟地址空间
2) 线程的上下文切换时间开销比进程上下文切换时间开销要小的多
3) 线程的创建开销远远小于进程的创建
4) 子进程拥有自己的地址空间和数据段的拷贝,因此当子进程修改它的变量和数据时,它不会影响父进程中的数据,但线程可以直接访问它进程中的数据段
5) 进程之间通讯必须使用进程间通讯机制,但线程可以与进程中的其他线程直接通讯
6) 线程可以对同一进程中的其他线程实施大量控制,但进程只能对子进程实施控制
7) 改变主线程的属性可能影响进程中其他的线程,但对父进程的修改不影响子进程。
LINUX下面 线程 是 lightweight process就是轻量级的进程。 一句话线程是共享了部分资源(地址空间、文件句柄、信号量等等)的进程。所以线程也按照进程的调度方式来进行调度。
阅读(575) | 评论(0) | 转发(0) |