文章目录

  • 1 进程
  • 2 线程
  • 3 进程和线程的区别和联系
    • 3.1 区别
    • 3.2 联系
  • 4 举例说明进程和线程的区别
  • 5 进程/线程之间的亲缘性
  • 6 协程
    • 线程(执行一个函数)和协程的区别和联系
    • 协程和多线程的优势?为什么有了多线程还要引入协程?
  • 7 更多
  • 8 相关链接

1 进程

概念

进程,直观点说,保存在硬盘上的程序运行之后,会在内存空间里形成一个独立的内存体,这个内存体有自己独立的地址空间,有自己的堆,上级挂靠单位是操作系统。

特点

操作系统会以进程为单位,分配系统资源(CPU时间片,内存等资源),进程是资源分配的最小单位。

示意图

2 线程

概念

线程,有时被称为轻量级进程(LightWeight Process,LWP),是操作系统调度(CPU调度)执行的最小单位。

示意图

3 进程和线程的区别和联系

3.1 区别

  • 调度:进程作为拥有资源的基本单位,线程作为调度和分配的基本单位
  • 并发性:不仅进程之间可以并发执行,同一个进程的多个线程也可以并发执行
  • 拥有资源:
    • 进程是拥有资源的基本单位,线程不直接拥有资源。
    • 线程可以访问隶属于进程的资源
    • 进程所维护的是程序所包含的资源(静态资源),比如:地址空间、打开的文件句柄、文件系统状态,信号处理handler
    • 线程所维护的是程序运行相关的资源(动态资源),如:运行栈、调度相关的控制信息、待处理的信号集…
  • 系统开销:
    • 进程的系统开销更大:在创建或者销毁进程时,由于系统需要位置分配和回收资源,导致系统的开销明显大于创建或者销毁线程时的开销。
    • 进程更稳定安全:
      • 进程有独立的内存空间,一个进程崩溃后,在保护模式下对其他进程不会有影响
      • 而线程只是一个进程中的不同的执行路径
    • 线程有自己的堆栈和局部变量,但是线程没有独立的地址空间,一个进程死掉等于该进程下所有的线程死掉。
      • 所以多进程的程序要比多线程的的程序稳健,但在多进程切换时,耗费资源大,性能较差。

3.2 联系

  • 一个线程只能属于一个进程,一个进程可以有多个线程,至少有一个线程
  • 资源分配给进程,同一进程的所有线程共享改进程的所有资源
  • 处理机(中央处理器+主存储器+输入输出设备)分配资源给进程,即真正运行在处理机上的是进程
  • 线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的方式实现同步

4 举例说明进程和线程的区别

这幅图是一个双向多通道的道路图,加入我们把整个道路看做一个“进程”的话,那种图中由白色虚线分割开的车道就是进程中的各个“线程”了

  • 这些车道(线程)共享了道路(进程)的土地资源(系统资源)
  • 这些车道(线程)必须依赖于道路(进程),否则车道将没有意义(线程不能脱离于进程而存在)
  • 这些车道(线程)之间可以并发运行(各个车道你走你的,我走我的),也可以同步运行(遇到红灯的情况,需要等待特点条件后再执行)
  • 这些车道(线程)的运行和交通灯(代码逻辑)息息相关,如果交通灯出现问题(代码逻辑问题,比如死锁,多个线程同时竞争同一资源),会造成交通混乱
  • 这些车道(线程)谁先运行起来是未知的,只有当信号灯变化(分配CPU时间的时候)那刻才知道

5 进程/线程之间的亲缘性

概念

亲缘性的意思是进程/线程只在某个CPU上运行(多核系统)

好处

使用CPU亲缘性的好处:防止进程/线程在CPU的多核间频繁切换,从而避免因切换带来的CPU的L1/L2 cache失效,cache失效会降低程序的性能。

6 协程

示意图

概念

  • 协程,是一个比线程改轻量级的存在,协程完全由程序控制(也就是在用户态执行)

    • 协程不被操作系统内核所管理
    • 协程能极大的提升性能,不会像线程切换那样消耗资源
  • 子程序,又称为“函数”。
    • 在所有语言中都是层级调用的,A调用B,B调用C,C执行完毕返回,B执行完毕返回,最终A执行完毕
    • 由此可见,子程序调用是通过栈实现的,一个线程就是执行一个子程序。

线程(执行一个函数)和协程的区别和联系

  • 函数总是一个入口,一个返回,调用顺序是明确的(一个线程就是执行一个函数)
  • 而协程的调用和函数不同,协程在函数内部是可以中断的,可以转而执行别的函数,在适当的时候再返回来接着执行。
def A(){print 1print 2print 3
}def B(){print 'x'print 'y'print 'z'
}
  • 比如上面代码如果是协程执行,在执行A的过程中,可以中断去执行B,在执行B的时候亦然。结果可能是: 1 x y 2 3 z
  • 同样上面的代码如果是线程执行,只能执行完A再执行B,或者执行完B再执行A,结果只可能是2种:1 2 3 x y z 或者 x y z 1 2 3

协程和多线程的优势?为什么有了多线程还要引入协程?

  • 极高的执行效率:

    • 因为函数(子程序)不是线程切换,而是由程序自身控制的,因此没有线程切换的开销;
    • 和多线程比,线程数量越多,协程的性能优势越明显
  • 不需要多线程的锁机制:
    • 因为只有一个线程,不存在同时写变量的冲突,在协程中控制共享资源不加锁,只需要判断状态就行了,因此执行效率比多线程高很多。

7 更多

进程间通信

8 相关链接

  • web开发必懂的概念和底层原理,通过对比的方式让大家更好的理解和使用。
  • 多维度思考:如何提高项目的开发时间、提高安全性、提高运行速度,从多个维度带来的一些思考。
  • 参考https加解密思路 实现自己网络请求数据传输的安全性,一致性,防篡改。(对称加密+非对称加密)
  • 进程线程协程参考链接

进程 线程 协程 各自的概念以及三者的对比分析相关推荐

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

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

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

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

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

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

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

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

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

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

  6. Python之进程+线程+协程(异步、selectors模块、阻塞、非阻塞IO)

    文章目录 一.IO多路复用 二.selectors模块 本篇文字是关于IO多路复用的更深入一步的总结,上一篇 Python之进程+线程+协程(事件驱动模型.IO多路复用.select与epoll)对I ...

  7. 进程线程协程-基本概念及特点

    进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本执行实体:在当代 ...

  8. 进程 线程 协程_进程 线程 协程 管程 纤程 概念对比理解

    不知道是不是我自己本身就有那么一丝丝的密集恐惧,把这么一大堆看起来很相似很相关的概念放在一起,看起来是有点麻,捋一捋感觉舒服多了. 相关概念 任务.作业(Job,Task,Schedule) 在进程的 ...

  9. 4.19 python 网络编程和操作系统部分(TCP/UDP/操作系统概念/进程/线程/协程) 学习笔记

    文章目录 1 网络编程概念 1)基本概念 2)应用-最简单的网络通信 2 TCP协议和UDP协议进阶(网络编程) 1)TCP协议和UDP协议基于socket模块实现 2)粘包现象 3)文件上传和下载代 ...

最新文章

  1. 2018.5.29 Oracle连接到空闲例程
  2. linux下安装mysql初始化报错:bin/mysqld: error while loading shared libraries: libnuma.so.1
  3. 用Python玩转微信的正确姿势!
  4. [na]vrrp两用(网关冗余+服务器热备)
  5. 域控制器显示无法使用解决办法
  6. TensorFlow 2.0 - TFRecord存储数据集、@tf.function图执行模式、tf.TensorArray、tf.config分配GPU
  7. 力扣-414 第三大的数
  8. Object C中创建线程的方法有NSThread,GCD, NSOperation
  9. 无码间串扰的基带传输特性
  10. 聊聊各种“上门”能不能做起来
  11. 轻量快速的国产导航软件Flare
  12. 基于STM32单片机的天然气甲烷硫化氢气体检测仪原理图PCB
  13. 流媒体转发服务器系统,流媒体转发服务器配置
  14. 从记忆星期浅谈日语学习感想
  15. 做个成功的嵌入式系统工程师
  16. 袁斌:极空间家庭私有云,您的数字资产大管家
  17. 第一范式转化为第二范式_管理学发展的范式转换及其哲学基础
  18. 设置PL/SQL Developer关键字自动变成大写
  19. 90后黑客攻击某购物平台 “一元购”买走800万金饰
  20. 决策树实例之预测隐形眼镜类型

热门文章

  1. android 余额宝,Android 仿支付宝中的余额宝收益进度条
  2. 什么是 WordPress Gutenberg 编辑器?
  3. No MyBatis mapper was found,Error creating bean with name 'xSqlSessionFactory' defined in class path
  4. JS下拉框把省份设置进去_怎么设置呼叫转移
  5. 如何查看电脑是否开启了超线程技术
  6. 手把手教NIS Edit安装向导的使用
  7. ZJOI2016一试游记
  8. 截取计算机全屏画面的方法是按,下列用于截取计算机全屏画面的方法不正确的是()。...
  9. kali linux 解决wireshark The capture session could not be initiated on capture device “eth0“ 问题
  10. 牛客小白月赛7 B自杀游戏(sg博弈)