计算机基础-进程与线程以及携程


前言

为什么出现进程,进程是什么,他解决了什么。

一、进程

1.进程的定义

为了更加贴切的描述程序并发过程中的变化,表现该动态性的特征,因为程序的静态性和顺序性无法描述该过程,添加了进程这一名称,来反馈系统的并发性,动态性,独立性,和相互制约的关系。比如我们浏览器打开一个网页,这里面就涉及到浏览器进程,网络进程,渲染进程等,而表面我们看到浏览器程序本身是没办法表示其中的变化过程。

特点

  • 进程是程序的一次执行,运行实例,每一个进程有自己的独立内存空间
  • 是和其他计算并发执行的计算
  • 可以定义为一个数据结构及能在其上进行操作的一个程序
  • 是一个程序及其数据在处理及上顺序执行时所发生的活动
  • 是程序在一个数据集合上的运行过程,是系统进行资源分配和调配的一个独立单位
  • 一个进程就是一个正在执行的程序,包括指令计数器,寄存器和变量的当前值

总结来说:进程是并发执行的程序在一个数据集合上的执行过程。资源分配的最小单位

2.进程间的通信方式

他丫的,记得曾经有次面试 ,就被追着这个问题问。回想当时,哎,真是狠己不争呀。
因为对于进程来说,他们的资源是独占的,进程之间的内容相互隔离,只能自己访问自己的,那么进程间如何进行通信呢?比如某个进程要把他的数据发送给别的进程。或者告诉他某些消息,比如网络进程获取到资源后,告诉渲染进程可以开始渲染了。

进程间的通信

我们说过进程间是独立的内存空间的,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程A把数据从用户空间拷到内核缓冲区,进程B再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信。
在这里插入图片描述

下面就有几种常见的方法:

信号量

根据交换信息量的大小,可以吧进程通信分为低级和高级通信,而信号量就是属于低级通信,因为他能传递的信息量小,效率低,但是优点是快。下面的三种都属于高级通信。

信号量机制一般是会设置初值 s.value 表示系统中某种资源的数量

同时分为 “P操作” 表示进程请求一个资源,所以又 s.value = s.value -1 当小于 0 就表示资源分配完了,需要等待。 执行 block 自我阻塞,插入到等待队列。

以及分为 “V操作” 表示进程请求一个资源,所以又 s.value = s.value +1 当小于等于 0 就表示等待队列有等待该资源的进程。 执行 waleup 唤醒等待队列中的一个进程。
信号量常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源,来解决进程同步和互斥的问题。

管道

该方式的所谓管道是指用来连接一个读进程和一个写进程,以实现进程间通信的一种共享文件(也叫pipe文件,)。数字类型只能为字符流。

消息队列

进程间的数据交换以信息为单位,用户通过使用操作系统提供的一组学习通信原语来实现信息的传递。同时根据实现的方式不同会分为直接通信方式和间接通信方式

共享内存

这种是进程通信前,可以向系统申请共享存储期间,并且指定该区间的名称。申请进程可以来连接到该共享区域中,便可以像读写普通存储区间一样对该共享区域进行读写操作,以达到传递大量学习的目的

3.IPC、LPC、RPC

IPC是进程间通信的缩写(IPC,Inter-Process Communication),进程间同信就是上面的介绍啦。这里就不过多的说了。但是进程间同信有可能是在同一台电脑上多个进程间的通信。也有可能是在网络上多台电脑间的进程通信。

同一台本机上的叫本地过程调用 (local procedure call),在我们的操作系统中,能使得多个任务同时传递信息会话,用到的也就是我们上面说的管道,共享内存等方式。

不在同一台本机上的叫远程过程调用 (remote procedure call),是指网络上的,用到网络通信协议的,比如我们用到的websocket ,http 就是。

二、线程

为了提高进程的并发性,进一步提高系统的吞吐量和效率。

优点

  • 响应程度高,即使部分线程堵塞或时间很久也没关系,线程中间不会互相影响
  • 资源共享,属于同一个进程的线程会共享进程的资源和内存
  • 经济实惠

三、协程

  • 比线程更加轻量级。一个线程可以拥有多个协程。其执行过程更类似于子例程,或者说不带返回值的函数调用。所以也可以说它的本质是一个单线程。
  • 协程也相对独立,有自己的上下文,但其上下文切换由开发人员控制,不同于进程和线程由系统内核切换
  • 当前协程切换到其他协程由当前协程来控制。
  • 主要协程为了避免了无意义的调度,无需系统内核的上下文切换,提高性能,同时,协程也失去了标准线程使用多CPU的能力。
  • 利用单线程和携程实现高并发处理

四、进程和线程的比较

  • 一个程序至少有一个进程,一个进程至少有一个线程.
  • 进程是拥有资源的基本单位,线程是调度和分派的基本单位,共享进程的资源
  • 都具有并发性,但线程的划分小于进程,有效的提高了效率
  • 多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。而是归属于的进程的下面。
  • 每一个进程都有对应的接口,但线程必须依赖于进程,不能独立存在。
  • 线程的意外终止会影响整个进程的正常运行,但是一个进程的意外终止不会影响其他的进程的运行。
  • 进程切换开销大,效率低,线程切换开销小,效率高。
    在这里插入图片描述

五、程序和进程的区别

  • 程序是指令的集合,进程是程序的一次运行过程
  • 进程是动态的,程序是静态的,并且进程会有一定的生命周期,从创建 ,执行,暂停,销毁等步骤。程序只是一组有序的指令实体。
  • 进程是并发的,程序是顺序的
  • 进程是有时效的(生命周期),程序是一个实体保存的具有永久性
  • 一个进程可以在一个或对多个程序中执行;通过多次执行,一个程序可以对应多个进程
  • 进程间的资源是独占式的,但线程间的资源是共享的

总结

总的来说,我们每一个程序都会产生一个或者多个进程,进程下面会有至少一个线程。进程有自己的独立内存空间,所以进程间的通信不能直接,需要通过一个中间介,并且可以有多种方式,比如信息号,共享内存,管道等。而线程间是共享他们同一个进程的资源的。另外进程间的通信如何避免冲突,还有很大的学问,我们有空再来探讨。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文默

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值