进程、线程、协程、通信方式
文章目录
- 进程
- 线程
- 协程
- 进程、线程、协程的区别
- 概念
- 进程、线程共同点
- 进程、线程不同点
- 线程、协程比较
- 通信方式之间的差异
- 进程通信
- 管道(pipe)
- 有名管道 (namedpipe)
- 信号量(semaphore)
- 消息队列(messagequeue)
- 信号 (sinal)
- 共享内存(shared memory)
- 套接字(socket)
- 线程间的通信方式
- 锁机制:包括互斥锁、条件变量、读写锁
- 信号量机制(Semaphore)
- 信号机制(Signal)
进程
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。
进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。它不只是程序的[代码],还包括当前的活动,通过[程序计数器]的值和处理[寄存器]的内容来表示。
进程的概念主要有两点:第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括[文本]区域(text region)、数据区域(data region)和[堆栈](stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。第二,进程是一个“执行中的程序”。程序是一个没有生命的实体,只有[处理]器赋予程序生命时(操作系统执行之),它才能成为一个活动的实体,我们称其为[进程]。
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。每个进程都有自己的独立内存空间,不同进程通过进程间通信来通信。由于进程比较重量,占据独立的内存,所以上下文进程间的切换开销(栈、寄存器、虚拟内存、文件句柄等)比较大,但相对比较稳定安全。
线程
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。线程间通信主要通过共享内存,上下文切换很快,资源开销较少,但相比进程不够稳定容易丢失数据。
一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程 在运行中呈现出间断性。线程也有[就绪]、[阻塞]和[运行]三种基本状态。就绪状态是指线程具备运行的所有条件,逻辑上可以运行,在等待处理机;运行状态是指线程占有处理机正在运行;阻塞状态是指线程在等待一个事件(如某个信号量),逻辑上不可执行。每一个程序都至少有一个线程,若程序只有一个线程,那就是程序本身。
线程是程序中一个单一的顺序控制流程。进程内一个相对独立的、可调度的执行单元,是系统独立调度和分派CPU的基本单位指[运行]中的程序的调度单位。在单个程序中同时运行多个线程完成不同的工作,称为[多线程]
协程
协程是一种用户态的轻量级线程,协程的调度完全由用户控制。协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。
进程、线程、协程的区别
概念
对于进程来说,子进程是父进程的复制品,从父进程那里获得父进程的数据空间,堆和栈的复制品。
而线程,相对于进程而言,是一个更加接近于执行体的概念,可以和同进程的其他线程之间直接共享数据,而且拥有自己的栈空间,拥有独立序列。
进程、线程共同点
它们都能提高程序的并发度,提高程序运行效率和响应时间。线程和进程在使用上各有优缺点。 线程执行开销比较小,但不利于资源的管理和保护,而进程相反。同时,线程适合在SMP机器上运行,而进程可以跨机器迁移。
进程、线程不同点
多进程中每个进程有自己的地址空间,线程则共享地址空间。
所有其他区别都是因为这个区别产生的。比如说:
地址空间:线程是进程内的一个执行单元,进程内至少有一个线程,它们共享进程的地址空间,而进程有自己独立的地址空间
资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源
线程是处理器调度的基本单位,但进程不是
二者均可并发执行
每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口,但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制
- 速度。线程产生的速度快,通讯快,切换快,因为他们处于同一地址空间。
- 线程的资源利用率好。
- 线程使用公共变量或者内存的时候需要同步机制,但进程不用。
而他们通信方式的差异也仍然是由于这个根本原因造成的。
线程、协程比较
一个线程可以多个协程,一个进程也可以单独拥有多个协程,这样python中则能使用多核CPU。
线程进程都是同步机制,而协程则是异步
协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态
通信方式之间的差异
因为那个根本原因,实际上只有进程间需要通信,同一进程的线程共享地址空间,没有通信的必要,但要做好同步/互斥,保护共享的全局变量。
而进程间通信无论是信号,管道pipe还是共享内存都是由操作系统保证的,是系统调用。
进程通信
管道(pipe)
管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
有名管道 (namedpipe)
有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
信号量(semaphore)
信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
消息队列(messagequeue)
消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
信号 (sinal)
信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
共享内存(shared memory)
共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。
套接字(socket)
套接口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同设备及其间的进程通信。
线程间的通信方式
锁机制:包括互斥锁、条件变量、读写锁
互斥锁提供了以排他方式防止数据结构被并发修改的方法。
读写锁允许多个线程同时读共享数据,而对写操作是互斥的。
条件变量可以以原子的方式阻塞进程,直到某个特定条件为真为止。对条件的测试是在互斥锁的保护下进行的。条件变量始终与互斥锁一起使用。
- wait/notify 等待
- Volatile 内存共享
- CountDownLatch 并发工具
- CyclicBarrier 并发工具
信号量机制(Semaphore)
包括无名线程信号量和命名线程信号量。
信号机制(Signal)
类似进程间的信号处理。
线程间的通信目的主要是用于线程同步,所以线程没有像进程通信中的用于数据交换的通信机制
进程、线程、协程、通信方式相关推荐
- 简要说明__python3中的进程/线程/协程
多任务可以充分利用系统资源,极大提升程序运行效率,多任务的实现往往与 多线程,多进程,多协程有关 稳定性: 进程 > 线程 > 协程 系统资源占用量:进程 > 线程 > 协程 ...
- Linux的进程/线程/协程系列4:进程知识深入总结:上篇
Linux的进程/线程/协程系列4:进程/线程相关知识总结 前言 本篇摘要: 1. 进程基础知识 1.1 串行/并行与并发 1.2 临界资源与共享资源 1.3 同步/异步与互斥 1.4 进程控制原语 ...
- linux的进程/线程/协程系列5:协程的发展复兴与实现现状
协程的发展复兴与实现现状 前言 本篇摘要: 1. 协同制的发展史 1.1 协同工作制的提出 1.2 自顶向下,无需协同 1.3 协同式思想的应用 2. 协程的复兴 2.1 高并发带来的问题 2.2 制 ...
- linux的进程/线程/协程系列3:查看linux内核源码——vim+ctags/find+grep
linux的进程/线程/协程系列3:查看linux内核源码--vim+ctags/find+grep 前言 摘要: 1. 下载linux内核源码 2. 打标签方法:vim+ctags 2.1 安装vi ...
- linux的进程/线程/协程系列1:进程到协程的演化
linux的进程/线程/协程系列1:进程到协程的演化 前言 摘要: 1. 一些历史:批处理时代 2. 现代操作系统启动过程 3. 进程(process)的出现 4. 线程(thread)与线程池 5. ...
- Python之进程+线程+协程(异步、selectors模块、阻塞、非阻塞IO)
文章目录 一.IO多路复用 二.selectors模块 本篇文字是关于IO多路复用的更深入一步的总结,上一篇 Python之进程+线程+协程(事件驱动模型.IO多路复用.select与epoll)对I ...
- 进程 线程 协程 各自的概念以及三者的对比分析
文章目录 1 进程 2 线程 3 进程和线程的区别和联系 3.1 区别 3.2 联系 4 举例说明进程和线程的区别 5 进程/线程之间的亲缘性 6 协程 线程(执行一个函数)和协程的区别和联系 协程和 ...
- 进程线程协程-基本概念及特点
进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本执行实体:在当代 ...
- 进程/线程/协程的区别
1 基本概念 进程(Process) 进程是应用程序的启动实例,进程拥有代码和打开的文件资源.数据资源.独立的内存空间. 线程(Lightweight Process,LWP) 线程从属于进程,是程序 ...
- java基础巩固-宇宙第一AiYWM:为了维持生计,四大基础之OS_Part_1整起(进程线程协程并发并行、进程线程切换进程间通信、死锁\进程调度策略、分段分页、交换空间、OS三大调度机制)
PART0:OS,这货到底是个啥? OS,是个啥? OS的结构们: 存储器: 存储器的层次结构: 内存:我们的程序和数据都是存储在内存,我们的程序和数据都是存储在内存,每一个字节都对应一个内存地址.内 ...
最新文章
- Nagios Web 页面声音报警
- Python进阶3——列表解析式和生成器表达式
- 计算机不读三星硬盘分区,电脑磁盘分区指南!一分钟就学会
- SQL2000 统计每周,每月,每季,每年的数据
- jquery可见性选择器(综合)
- 一文了解 Java 应用程序性能优化指南
- O365 打开或关闭脚本功能
- 解决【C++】其他类中友元函数不可访问私有数据--顺序问题
- everedit选择_Jass编辑器推荐 Everedit
- 阿里云达摩院视觉AI介绍
- 用java画国际象棋棋盘
- mysql中函数row_number()如何使用它为结果集中的每一行生成序列号
- 均匀分布(Uniform distribution)
- 新装固态硬盘SSD,在安装WIN10,显示一直请稍后及Windows安装程序无法将Windows配置为此计算机的解决方法(网上都是胡诌)
- Spark创建DataFrame
- python3 NCR 字符解码
- node、express框架
- 区块链创新之路,该何去何从?
- 文化算法 方向图综合 matlab,二维矩形阵列天线方向图综合
- 安卓热点开发方法变化
热门文章
- python中bytearray和java中byte[]的区别_Python经典面试题:说说Python中xrange和range的区别?...
- ad 原理图差分线_usb hub原理图及pcb设计
- [湖南集训]更为厉害 树上主席树-以树深度为下下标建立主席树
- 计算机二级vfp知识点,全国计算机二级等级考试VFP知识点提纲
- php ascii转native,编码转换工具native2ascii的使用
- spark 算子例子_10年大数据架构师,用一文带你玩转Spark计算框架,你能读懂吗?...
- java 打电话_第四十二篇----拨打电话
- UVA10296 Jogging Trails(中国邮递员问题)(欧拉回路、一般图最大权匹配 / 状压DP)
- CF5A Chat Server's Outgoing Traffic(字符串模拟,find函数的应用)难度⭐
- 监控组件_分布式监控组件Cat,如何实现万亿级消息的高效存储?