自学内容网 自学内容网

程序,进程,线程,进程间通信

程序:相对来说就是静态的一段代码

而进程:就是程序代码运行起来,指令去执行,数据去使用,来做一件事情的过程

相对程序员来说就是动态的

这里动态交互就要依赖操作系统去调度它了,在数据方面也就要系统进行资源分配

一个进程里有很多事情要去做,要数据资源,要执行调度等

任务多就会影响效率问题,所以就提出需要把这个任务去拆分一下,则有了线程

一个进程里面有多个线程,执行不同任务,即多个线程共同拆分一个进程的任务

所以就有经典的2句话

进程是资源的管理单位

线程是资源的调度单位

所以进程包含线程,多个线程的共享一个进程的资源,进程管理线程的资源

进程就是一个要完成的完整大事件,线程就是事件里面的不同步骤,线程要相互协作才能进程完成

用拍电影来举例:

其有导演,编剧,演员,化妆,灯光,道具,拍摄,场务,场地等多个部分组成,这多个部分就是不同线程,它们可能会使用共同的内存,资源,其共同协作才能拍出电影

那么拍电影这个事情,整体进行下去,就是一个进程

这里CPU就相当于系统的作用,整体协作调度,有它支持电影才能拍下去

如果当前的影视基地里面同时有几个电影拍摄片场,这几个电影同时间都在拍摄,都要使用这个拍摄场地,这就是共享内存、资源,这里就是多进程,多线程的问题,比如同场地,A电影拍摄一段时间,B电影在拍摄一段时间

在同一个电影拍摄片场里面,也有内部资源划分使用的问题,也会分不同的拍摄组,A组B组等划分为不同的拍摄片区

不同的片区即不同的房间,那么房间的容量就要看一下,是只能允许一个人进出的,还是允许固定N个人可以进入的等

还有在自己的使用时间段内,不能被再来的其他人挤出去,请出去等,要保证自己的正常使用,这就有资源保护问题,所以要带上锁,锁上房间门等

PCB:进程控制块,被定义为一个结构体,其面向操作系统,在系统管理调度进程时使用

其第一个部分信息跟操作系统有关,剩下2个部分信息跟程序代码本身有关

动态的进程就会有一些状态上的辨析,对操作系统来说是有很多个进程的,所以每个进程要清楚自己当前是处于什么样的运行状态,才好调度

系统在分配时间片会有优先级问题

在Linux系统里面去运行时是可以看到当前的状态的,用ps命令看一下进程当前运行的状态,例如S状态符号等

造成僵尸进程的原因是:该进程的任务已经结束了,但是该进程的资源并没有释放掉

下面多个进程之间,就会有进程内部的一个沟通,即进程间通信(IPC),是一个资源交互问题

那么就需要对话沟通,就像微信上2个账号发信息聊天

而进程间通信是通过内核

随着计算机发展,它不会去直接使用物理空间了,例如你的电脑有8个G,但电脑实际运行起来占用的内存空间肯定不止8个G,所以就有了虚拟地址映射,让实际上的8个G在用起来时好像扩展了很多倍,来骗过CPU,让CPU以为你的小空间非常大

当2个进程需要去找同一块空间去进行数据的交换时,那它们的空间是同一块空间嘛,一个进程去运行的时候用的是虚拟地址,而虚拟地址是具有欺骗性的,所以它们同一时刻映射的并不一定是同一块物理空间,所以2个进程虽然拿的是同一块地址,但物理空间不一定是同一块

所以要拿到同一块空间来进行数据交互,就是进程间通信要讨论的问题

而线程间通信由于它们是共用进程的资源,所以线程上下文切换的速度更快

上下文就是时间片的意思,什么样的时间去执行什么样的内容,不同时间片执行不同内容,即上下文切换

例如对一个文件的操作,上一个线程完成它的任务,可以立即切换到下一个进程进行文件操作,如用多线程去写同一个文件的练习

不同线程可以是同时进行的

实际操作中为了高效率会把线程进行切片处理的操作,也就是时间片问题,黄色为运行态,白色为就绪态

线程是基本调度单位,都是同时创建的

这里有同步异步问题,即线程之间有无相互依赖的问题

同步:要依赖前面的一个任务,后面的一个任务才能完成

异步:没有依赖关系,当前谁可以执行,就选择谁执行

这种以线程片段按照时间先后顺序,进行运行的方式就叫做时间片,即调度问题

不用等一个线程全部执行完后再去执行下一个线程

其中共享内存和套接字用的比较多

因为套接字可以当做服务器和客户端去进行的一个通信,而2个进程就可以当做一个是服务器,一个是客户端

调度的最终目的是为了让计算机执行的更快


原文地址:https://blog.csdn.net/wzdxsa/article/details/143831179

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!