程序,进程,线程,进程间通信
程序:相对来说就是静态的一段代码
而进程:就是程序代码运行起来,指令去执行,数据去使用,来做一件事情的过程
相对程序员来说就是动态的
这里动态交互就要依赖操作系统去调度它了,在数据方面也就要系统进行资源分配
一个进程里有很多事情要去做,要数据资源,要执行调度等
任务多就会影响效率问题,所以就提出需要把这个任务去拆分一下,则有了线程
一个进程里面有多个线程,执行不同任务,即多个线程共同拆分一个进程的任务
所以就有经典的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)!