一、进程:

是系统进行资源分配和调度的基本单位,是操作系统结构的基础,是程序的实体;每个进程都有它自己的地址空间(文本区域、数据区域、堆栈);

二、线程:

是程序执行流的最小单元,一个标准的线程由线程ID、当前指令指针、寄存器集合和堆栈组成;线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所有的全部资源;

一个进程可以包含多个线程,每个线程为使用从cpu的基本单元;是花费最小开销的实体;同一个进程内的线程共享内存和文件;

三、协程:

协程不是被操作系统内核所管理,而完全是由程序(用户)所控制。例如:A调用B,B调用C,C执行完毕返回,B执行完毕返回,最后在执行A完毕;子程序调用是通过栈实现,一个线程是执行一个子程序;协程在子程序内部是可中断的,然后转而执行别的子程序,在适当的时候在返回来接着执行;

协程和线程的比较

比较项

线程

协程

占用资源

初始单位为1MB,固定不可变

初始一般为 2KB,可随需要而增大

调度所属

由 OS 的内核完成

由用户完成

切换开销

涉及模式切换(从用户态切换到内核态)、16个寄存器、PC、SP...等寄存器的刷新等

只有三个寄存器的值修改 - PC / SP / DX.

性能问题

资源占用太高,频繁创建销毁会带来严重的性能问题

资源占用小,不会带来严重的性能问题

数据同步

需要用锁等机制确保数据的一直性和可见性

不需要多线程的锁机制,因为只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不加锁,只需要判断状态就好了,所以执行效率比多线程高很多。

进程、线程、协程之间的关系相关推荐

  1. python 协程、进程、线程_Python进程、线程、协程之间的关系

    一.从操作系统角度 操作系统处理任务, 调度单位是 进程 和 线程 . 1.进程: 表示一个程序的执行活动 (打开程序.读写程序数据.关闭程序) 2.线程: 执行某个程序时, 该进程调度的最小执行单位 ...

  2. Go语言线程与协程之间的关系之GMP模型

    1. GMP模型 这里首先给出GMP模型的调度策略. 让大家有一个全局的认识更好 2. G (groutine) G就是goroutine的意思, 代表了一个协程. 每次go调用的时候,都会创建一个G ...

  3. linux的进程/线程/协程系列5:协程的发展复兴与实现现状

    协程的发展复兴与实现现状 前言 本篇摘要: 1. 协同制的发展史 1.1 协同工作制的提出 1.2 自顶向下,无需协同 1.3 协同式思想的应用 2. 协程的复兴 2.1 高并发带来的问题 2.2 制 ...

  4. python协程和线程_线程和协程之间的区别

    线程和协程之间的区别很大,甚至大过进程和线程之间的区别.线程建立在进程之上,协程建立在线程之上.那么协程是什么呢? 协程是一段计算机程序,它一般是一个协作类型的子程序,执行时允许暂停和恢复.协程非常适 ...

  5. 进程 线程 协程_进程,线程,协程那些事

    无论我们写出怎样的程序,最后都是由操作系统来运行我们的程序,而操作系统如何管理我们的程序,我们程序的数据如何保存和计算,这些都是操作系统需要处理的事情,我们只要将写好的程序交给操作系统就好. 虽然操作 ...

  6. Linux的进程/线程/协程系列4:进程知识深入总结:上篇

    Linux的进程/线程/协程系列4:进程/线程相关知识总结 前言 本篇摘要: 1. 进程基础知识 1.1 串行/并行与并发 1.2 临界资源与共享资源 1.3 同步/异步与互斥 1.4 进程控制原语 ...

  7. linux的进程/线程/协程系列1:进程到协程的演化

    linux的进程/线程/协程系列1:进程到协程的演化 前言 摘要: 1. 一些历史:批处理时代 2. 现代操作系统启动过程 3. 进程(process)的出现 4. 线程(thread)与线程池 5. ...

  8. 简要说明__python3中的进程/线程/协程

    多任务可以充分利用系统资源,极大提升程序运行效率,多任务的实现往往与 多线程,多进程,多协程有关 稳定性: 进程 > 线程 > 协程 系统资源占用量:进程 > 线程 > 协程 ...

  9. linux的进程/线程/协程系列3:查看linux内核源码——vim+ctags/find+grep

    linux的进程/线程/协程系列3:查看linux内核源码--vim+ctags/find+grep 前言 摘要: 1. 下载linux内核源码 2. 打标签方法:vim+ctags 2.1 安装vi ...

最新文章

  1. 台式计算机无线设置,台式电脑怎么设置无线网络?
  2. 无线网络会杀死固网? 不可能的事情
  3. java构造方法何时被调用_构造方法何时被调用
  4. python猜拳游戏三局两胜制_猜拳游戏三局两胜------java实现代码
  5. CodeForces 982F. The Meeting Place Cannot Be Changed
  6. 项目实例改编:利用structs2的action 实时显示图片、pdf和其他内容的框架抽取。(转)...
  7. java cron工具类_Java工具类之:包装类
  8. 编辑器、编译器和IDE的区别
  9. 笔记本安装windows系统全流程(附上遇到常见问题解决办法)
  10. gphp32.exe是什么文件?
  11. 台式电脑 航嘉机箱 前面板耳机只有一边(左边)有声音 问题解决
  12. php多级分栏,网页设计中分栏布局的几种实现方案
  13. Espresso的详细使用
  14. 教育部中央电教馆—家庭教育指导师证书
  15. 《约伯记》注释正文 第十三章
  16. PHP代码审计16—ThinkPHP代码审计入门
  17. poj 1205 :Water Treatment Plants (DP+高精度)
  18. Ubuntu部署轻量化工具supervisor
  19. 哈佛结构和冯诺依曼结构
  20. python文件调用python文件_自己写的python文件如何相互调用

热门文章

  1. 【BYM】Android 仿百度搜索列表滑动效果,又到一年金三银四
  2. Part 13 (1) Fourier级数基本概念与应用
  3. kubectl查看node状态_K8S常用命令
  4. 第0章 计算机硬件与组成基础
  5. Pytorch版本YOLOv3模型转Darknet weights模型然后转caffemodel再转wk模型在nnie上面推理
  6. 听说你立志要做数据分析,不如先听听老司机的建议?
  7. RPM包rpmbuild SPEC文件深度说明
  8. 如何处理前端js报错——容错处理的汇总
  9. 视频播放AVPlayer的使用
  10. 惠斯登电桥传感器电路设计技巧,了解一下?