进程与线程

进程与线程概述

不管是基于windows,linux还是其他平台,或者C还是java等编程语言,都会最后得到运行的程序,都会使用到进程与线程。

程序是一种静态概念,是保存在磁盘上的一系列文件。
进程是一种动态概念,是运行中的程序,是资源分配的最小单元,一个程序包括一个或多个进程。
线程是CPU运算调度的最小单元,也可以当做轻量级的进程,一个进程可以包含一个或者多个线程。

进程

进程概述

多进程是指操作系统能同时运行多个任务(程序)。
每个进程都有独立的代码和数据空间(进程上下文)。

进程间通信

  1. 管道(pipe)及有名管道(named pipe):管道可用于具有亲缘关系的父子进程间的通信,有名管道除了具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。

  2. 信号(signal):信号是在软件层次上对中断机制的一种模拟,它是比较复杂的通信方式,用于通知进程有某事件发生,一个进程收到一个信号与处理器收到一个中断请求效果上可以说是一致的。

  3. 消息队列(message queue):消息队列是消息的链接表,它克服了上两种通信方式中信号量有限的缺点,具有写权限得进程可以按照一定得规则向消息队列中添加新信息;对消息队列有读权限得进程则可以从消息队列中读取信息。

  4. 共享内存(shared memory):可以说这是最有用的进程间通信方式。它使得多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程中对共享内存中数据得更新。这种方式需要依靠某种同步操作,如互斥锁和信号量等。

  5. 信号量(semaphore):主要作为进程之间及同一种进程的不同线程之间得同步和互斥手段。

  6. 套接字(socket):这是一种更为一般得进程间通信机制,它可用于网络中不同机器之间的进程间通信,应用非常广泛。

线程

多线程是指在同一程序中有多个顺序流在执行。

线程与进程的关系和区别

火车类比

引用知乎作者:biaodianfu
进程=火车,线程=车厢
线程在进程下行进(单纯的车厢无法运行)。
一个进程可以包含多个线程(一辆火车可以有多个车厢)。
不同进程间数据很难共享(一辆火车上的乘客很难换到另外一辆火车,比如站点换乘)。
同一进程下不同线程间数据很易共享(A车厢换到B车厢很容易)。
进程要比线程消耗更多的计算机资源(采用多列火车相比多个车厢更耗资源)。
进程间不会相互影响,一个线程挂掉将导致整个进程挂掉(一列火车不会影响到另外一列火车,但是如果一列火车上中间的一节车厢着火了,将影响到所有车厢)。
进程可以拓展到多机,进程最多适合多核(不同火车可以开在多个轨道上,同一火车的车厢不能在行进的不同的轨道上)。
进程使用的内存地址可以上锁,即一个线程使用某些共享内存时,其他线程必须等它结束,才能使用这一块内存。(比如火车上的洗手间)-“互斥锁”。
进程使用的内存地址可以限定使用量(比如火车上的餐厅,最多只允许多少人进入,如果满了需要在门口等,等有人出来了才能进去)-“信号量”。

过程

进程和线程都会经历:创建,就绪,运行,阻塞和终止。

数据组成

各个线程之间共享程序的内存空间(也就是所在进程的内存空间)。一个标准的线程由线程ID,当前指令指针PC,寄存器和堆栈组成。而进程由内存空间(代码,数据,进程空间,打开的文件)和一个或多个线程组成。

————
2022/07/29
家中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值