linux进程线程协程的区别,进程和线程、协程的区别
现在多进程多线程已经是老生常谈了,协程也在最近几年流行起来。python中也有协程库,tornado中也用了gevent封装好的协程。本文主要介绍进程、线程和协程三者之间的区别。
一、概念
1、进程
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。每个进程都有自己的独立内存空间,不同进程通过进程间通信来通信。由于进程比较重量,占据独立的内存,所以上下文进程间的切换开销(栈、寄存器、虚拟内存、文件句柄等)比较大,但相对比较稳定安全。
2、线程
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。线程间通信主要通过共享内存,上下文切换很快,资源开销较少,但相比进程不够稳定容易丢失数据。
3、协程
协程是一种用户态的轻量级线程,协程的调度完全由用户控制。协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。
二、区别:
1、进程多与线程比较
线程是指进程内的一个执行单元,也是进程内的可调度实体。线程与进程的区别:
1) 地址空间:线程是进程内的一个执行单元,进程内至少有一个线程,它们共享进程的地址空间,而进程有自己独立的地址空间
2) 资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源
3) 线程是处理器调度的基本单位,但进程不是
4) 二者均可并发执行
5) 每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口,但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制
2、协程多与线程进行比较
1) 一个线程可以多个协程,一个进程也可以单独拥有多个协程,这样python中则能使用多核CPU。
2) 线程进程都是同步机制,而协程则是异步
3) 协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态
linux进程线程协程的区别,进程和线程、协程的区别相关推荐
- python进程线程协程区别_Python3多线程与协程
python中的多线程非常的常用,之前一直糊里糊涂地使用,没有一些系统性的概念,记录一下~ 0x001 多线程的优势:可将长时间占用的程序放到后台 可能会加速程序执行速度 能够实现一些类似同步执行的效 ...
- java基础巩固-宇宙第一AiYWM:为了维持生计,四大基础之OS_Part_1整起(进程线程协程并发并行、进程线程切换进程间通信、死锁\进程调度策略、分段分页、交换空间、OS三大调度机制)
PART0:OS,这货到底是个啥? OS,是个啥? OS的结构们: 存储器: 存储器的层次结构: 内存:我们的程序和数据都是存储在内存,我们的程序和数据都是存储在内存,每一个字节都对应一个内存地址.内 ...
- [Linux]线程概念_线程控制(线程与进程的区别与联系 | 线程创建 | 线程等待 | 线程终止 | 线程分离 | LWP)
文章目录 线程概念 进程和线程的关系 线程的优点 线程的缺点 线程控制 Linux线程和接口关系的认识 线程创建 线程ID及进程地址空间布局 线程等待 线程终止 线程终止状态 线程分离 LWP和pth ...
- linux知识(一) 程序、进程与线程
linux知识(一) 程序.进程与线程 程序 进程 程序如何变成进程? 线程 线程与进程 fork和创建新线程的区别 优点 程序 程序:程序是已编译好的二进制文件,存储在磁盘中,不占用系统资源 程序包 ...
- Linux系统编程【文件IO、进程、进程间通信、信号、线程、互斥】
linux系统编程 个人通过学习,手打了一份48000字的Linux系统编程的笔记,包含了[文件IO.进程.进程间通信.信号.多线程.互斥]等知识点,并给出了大量的代码案例对每个重要的知识点进行了代码 ...
- 【Linux进程、线程、任务调度】二 fork/vfork与写时拷贝 线程的本质 托孤 进程睡眠和等待队列
学习交流加(可免费帮忙下载CSDN资源): 个人微信: liu1126137994 学习交流资源分享qq群1(已满): 962535112 学习交流资源分享qq群2(已满): 780902027 学习 ...
- cef linux 多线程模式,CEF3开发者系列之进程和线程
CEF3是一个多进程架构框架,如果有了解过chromium的进程架构的,那么就很容易了解CEF3的多进程了.打开CEF3源代码中发布的cefclient实例,如果打开的页面带有flash或者其他插件. ...
- Linux系统中查看LWP(轻量级进程)、进程 、 线程的ID的方法
现代操作系统中,进程支持多线程 . 进程是分配资源(资源管理)的最小单元:而线程是调度资源(程序执行)的最小单元.Linux中没有真正的线程,线程是由进程来模拟实现的(又称作:轻量级进程). 所以在L ...
- 进程和线程的区别 进程间的通信方式
进程和线程都是操作系统实现并发执行的基本单元,但有以下区别: 1.资源拥有:进程有独立的地址空间,拥有系统资源的拷贝,线程共享进程的资源.进程间通信较麻烦,线程间通信简单. 2.执行单元:进程是程序的 ...
最新文章
- shell 动态进程守护
- Nginx-场景实践篇
- 中国殡葬行业投资战略建议与前景策略分析报告2022-2028年版
- 删除python的注册表_Python操作注册表详细步骤介绍
- 5.12 QR分解的阻尼倒数法和正则化方法区别
- 微服务整合系列整个代码
- python的类作用_python——类中的self到底的作用及三个应用场景
- java对菜单项的监听_我是新手,请问大神java菜单项和下拉列表添加监听和监听方法???有变量和方法就行了...
- 使用Zabbix监控Windows主机
- Spring Boot文件目录介绍
- MAX232(MAX3232)电平转换芯片的工作原理
- 游戏测试和软件测试哪个好点?
- SCI收录的文献类型与认证的文献类型
- 夯实Java基础系列10:深入理解Java中的异常体系
- win10文件夹加密_Win10今年最重磅更新!Win10 2004正式版详尽体验
- 论文精度MISC: A MIxed Strategy-Aware Model Integrating COMET for Emotional Support Conversation
- WebRTC语音对讲无声音
- jvm(17)垃圾回收器
- 从txt中读取float数据C++
- 小程序开发费用一览表,如果你也想要用低成本制作出自己的小程序,来了解一下!
热门文章
- cnn stride and padding_经典CNN网络解析
- 【Flink】flink-1.12 通过 -t 指定模式后无法指定yarn参数
- 【maven】mvn deploy 报错 Failed to deploy artifacts: Could not transfer artifact
- 95-848-020-源码-AKKA-Akka与Actor 模型
- 【Flink】Flink消费Kafka数据时指定offset的五种方式
- Registry:THERE IS NOT VERSION ASSOCIATED FOR THIS PARTICULAR SCHEMA
- Spark写入MySQL报错乱码+报错
- Spring-Jpa : @MappedSuperclass的作用
- 【Flink】Flink TaskManager 内存不足导致重启
- Kudu : kudu运行的时候-停止master RecoverableException: Failed to connect to peer master