进程和线程
来源:互联网 发布:app源码 编辑:程序博客网 时间:2024/05/19 19:13
(每个进程有自己的独立的虚拟地址空间,切换进程可能要更换页表,TLB等很多进程恢复需要的信息)
在32位的Windows系统中,术语多任务是指系统可以同时运行多个进程,而每个进程也可以同时执行多个线程。
进程就是应用程序的运行实例。每个进程都有自己私有的虚拟地址空间。每个进程都有一个主线程,但可以建立另外的线程。进程中的线程是并行执行的,每个线程占用CPU的时间由系统来划分。
可以把线程看成是操作系统分配CPU时间的基本实体。系统不停地在各个线程之间切换,它对线程的中断是汇编语言级的。系统为每一个线程分配一个CPU时间片,某个线程只有在分配的时间片内才有对CPU的控制权。实际上,在PC机中,同一时间只有一个线程在运行。由于系统为每个线程划分的时间片很小(20毫秒左右),所以看上去好象是多个线程在同时运行。
进程中的所有线程共享进程的虚拟地址空间,这意味着所有线程都可以访问进程的全局变量和资源。这一方面为编程带来了方便,但另一方面也容易造成冲突。
虽然在进程中进行费时的工作不会导致系统的挂起,但这会导致进程本身的挂起。所以,如果进程既要进行长期的工作,又要响应用户的输入,那么它可以启动一个线程来专门负责费时的工作,而主线程仍然可以与用户进行交互。
进程和线程
进程:多任务系统的产物
很久很久以前,是没有进程这个东西的。那时候的操作系统只能把要做的工作排好队,做完这件再做下一件,最多也就加个优先级,哪个关系好就先做哪一个。于是那些想一边听歌一边写程序的程序员们便不干了,开始修理那个操作系统,使之能同时运行多个程序。于是进程就出现了:它就是一个程序在数据集合上的一次执行。
因为突然变得僧多粥少了,所以每个进程只好做一些额外的事情:在别人使用之前把自己的东西收拾好,下次轮到自己时再摆出来。为了保存这些额外的东西,进程的结构也发生了相应的变化。一个进程被分成三大部分:代码段、数据段和PCB(进程控制块)。
在多出来的PCB中,我们保存了如下信息:
l 进程标识符(操作系统用于识别进程的唯一标识)
l 处理机状态(主要是通用寄存器,指令寄存器,PSW和用户栈指针)
l 进程调度信息(状态、优先级,被阻塞原因和其他一些乱七八糟的东西)
l 进程控制信息(同步信息、代码段和数据段的信息、资源清单和指向下一个PCB的指针)
操作系统正是通过PCB来管理这多个进程。在这样的系统里,进程既是操作系统独立调度和分派的基本单位,又是一个可拥有资源的独立单位。
线程:进程的再分身
好了,现在程序员可以一般听歌一边写程序了。可是不幸的或者说是幸运的,新的问题出现了。如果多个进程间使用很多相同数据的话,实在是太浪费了。我们当然不能允许这样的事情持续下去,所以线程出现了。同一个进程下可以拥有多个线程,它们共享这个进程的资源,它们之间的切换也不再需要PCB,而只需要极少一点资源就可以了。在这样的操作系统里,线程变成了系统调度和分派的基本单位。
简单的说进程和线程有如下不同:
l 进程可以拥有资源,线程共享进程拥有的资源
l 进程间的切换必须保存PCB,同个进程的多个线程间的切换不用那么麻烦
最后我们以一个实例来作为本文的结束:
当你在一台PC上打开两个QQ时,每一个QQ是一个进程;而当你在一个QQ上和多人聊天时,每一个聊天窗口就是一个线程。
- 进程和线程
- 关于进程和线程
- 进程和线程
- 进程和线程
- 小解进程和线程
- 进程和线程
- 理解进程和线程
- 进程和线程
- 进程和线程
- 进程和线程 编程
- 进程和线程
- 进程和线程
- 线程和进程
- 进程和线程编程
- 程序、进程和线程
- 进程和线程 区别
- 进程和线程编程
- 什么是线程和进程
- 开漏与推挽
- chm文件打不开的解决办法
- SQL分页语句
- Custom Splitter Window using MFC class CSplitterWnd
- 双模(CDMA/GSM)手机实现短信监听
- 进程和线程
- js实现朝一个方向不间断的图片滚动,这是不能实现的(即最后一张图片跑完后紧接着进行第一张图片)
- 对照Startup.s学习ARM汇编指令(转..)
- DynamicLayout-VC 6.0对话框动态布局解决方案
- 第一章 客户/服务器网络介绍
- wget
- STL理解
- SMS 发送流程
- OnPaint里的故事