当前位置:网站首页>进程与线程
进程与线程
2022-08-02 17:57:00 【liebecl】
进程与线程概述
不管是基于windows,linux还是其他平台,或者C还是java等编程语言,都会最后得到运行的程序,都会使用到进程与线程。
程序是一种静态概念,是保存在磁盘上的一系列文件。
进程是一种动态概念,是运行中的程序,是资源分配的最小单元,一个程序包括一个或多个进程。
线程是CPU运算调度的最小单元,也可以当做轻量级的进程,一个进程可以包含一个或者多个线程。
进程
进程概述
多进程是指操作系统能同时运行多个任务(程序)。
每个进程都有独立的代码和数据空间(进程上下文)。
进程间通信
管道(pipe)及有名管道(named pipe):管道可用于具有亲缘关系的父子进程间的通信,有名管道除了具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。
信号(signal):信号是在软件层次上对中断机制的一种模拟,它是比较复杂的通信方式,用于通知进程有某事件发生,一个进程收到一个信号与处理器收到一个中断请求效果上可以说是一致的。
消息队列(message queue):消息队列是消息的链接表,它克服了上两种通信方式中信号量有限的缺点,具有写权限得进程可以按照一定得规则向消息队列中添加新信息;对消息队列有读权限得进程则可以从消息队列中读取信息。
共享内存(shared memory):可以说这是最有用的进程间通信方式。它使得多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程中对共享内存中数据得更新。这种方式需要依靠某种同步操作,如互斥锁和信号量等。
信号量(semaphore):主要作为进程之间及同一种进程的不同线程之间得同步和互斥手段。
套接字(socket):这是一种更为一般得进程间通信机制,它可用于网络中不同机器之间的进程间通信,应用非常广泛。
线程
多线程是指在同一程序中有多个顺序流在执行。
线程与进程的关系和区别
火车类比
引用知乎作者:biaodianfu
进程=火车,线程=车厢
线程在进程下行进(单纯的车厢无法运行)。
一个进程可以包含多个线程(一辆火车可以有多个车厢)。
不同进程间数据很难共享(一辆火车上的乘客很难换到另外一辆火车,比如站点换乘)。
同一进程下不同线程间数据很易共享(A车厢换到B车厢很容易)。
进程要比线程消耗更多的计算机资源(采用多列火车相比多个车厢更耗资源)。
进程间不会相互影响,一个线程挂掉将导致整个进程挂掉(一列火车不会影响到另外一列火车,但是如果一列火车上中间的一节车厢着火了,将影响到所有车厢)。
进程可以拓展到多机,进程最多适合多核(不同火车可以开在多个轨道上,同一火车的车厢不能在行进的不同的轨道上)。
进程使用的内存地址可以上锁,即一个线程使用某些共享内存时,其他线程必须等它结束,才能使用这一块内存。(比如火车上的洗手间)-“互斥锁”。
进程使用的内存地址可以限定使用量(比如火车上的餐厅,最多只允许多少人进入,如果满了需要在门口等,等有人出来了才能进去)-“信号量”。
过程
进程和线程都会经历:创建,就绪,运行,阻塞和终止。
数据组成
各个线程之间共享程序的内存空间(也就是所在进程的内存空间)。一个标准的线程由线程ID,当前指令指针PC,寄存器和堆栈组成。而进程由内存空间(代码,数据,进程空间,打开的文件)和一个或多个线程组成。
————
2022/07/29
家中
边栏推荐
猜你喜欢

TSF微服务治理实战系列(一)——治理蓝图

针对时间的功能测试点,这里给你总结全面了

Endanger the safety of common Internet attacks have?

有关代购系统搭建的那点事

Openharmony - 基于ArkUI(TS)开发颜色选择器

shell中awk命令的if条件语句引入外置变量

DevOps之代码检查

pydev debugger: warning: trying to add breakpoint to file that does not exist: /tmp/xxx

载20(S)-人参皂苷/细胞穿膜肽-单克隆抗体-载丝裂霉素白蛋白纳米微球的制备

What skills are the most practical for college students in communications?
随机推荐
研发运营一体化(DevOps)能力成熟度模型
分布式 | dble 启动的时候做了什么之配置检测
shell中awk命令的if条件语句引入外置变量
注释
解决多版本jar包冲突问题
故障分析 | 一条 SELECT 语句跑崩了 MySQL ,怎么回事?
pydev debugger: warning: trying to add breakpoint to file that does not exist: /tmp/xxx
AtomicInteger详解
监控易火星版即将亮相:分布式运维帮助TOP3000大企业跨越管理鸿沟
HDF驱动框架的API(1)
天翼云4.0分布式云赋能千行百业数字化转型
一文看懂推荐系统:概要01:推荐系统的基本概念
golang刷leetcode 经典(1) LRU缓存机制
Simulink脚本自动创建Autosar Parameter Port及Mapping
织梦自定义表单添加全选和全不选功能按钮
golang刷leetcode 经典(4) 实现跳表
mysql四种隔离级别
55.【sort函数的升序降序】
How to mitigate the attack of corporate account hijacking?
Remember the stuck analysis of an industrial automation control system in .NET