什么是进程?什么是线程?什么是协程?

进程是什么?

进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。

狭义定义:进程是正在运行的程序的实例(an instance of a computer program that is being executed)。

广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。

进程的概念主要有两点:第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。第二,进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时(操作系统执行之),它才能成为一个活动的实体,我们称其为进程。

直白地讲,进程就是应用程序的启动实例。比如我们运行一个游戏,打开一个软件,就是开启了一个进程。

进程拥有代码和打开的文件资源、数据资源、独立的内存空间。

线程是什么?

线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在Unix System V及SunOS中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户线程(user thread)称为线程。

线程是独立调度和分派的基本单位。线程可以为操作系统内核调度的内核线程,如Win32线程;由用户进程自行调度的用户线程,如Linux平台的POSIX Thread;或者由内核与用户进程,如Windows7的线程,进行混合调度。

同一进程中的多条线程将共享该进程中的全部系统资源,如虚拟地址空间,文件描述符和信号处理等等。但同一进程中的多个线程有各自的调用栈(call stack),自己的寄存器环境(register context),自己的线程本地存储(thread-local storage)。

一个进程可以有很多线程,每条线程并行执行不同的任务。

在多核或多CPU,或支持Hyper-threading的CPU上使用多线程程序设计的好处是显而易见,即提高了程序的执行吞吐率。在单CPU单核的计算机上,使用多线程技术,也可以把进程中负责I/O处理、人机交互而常被阻塞的部分与密集计算的部分分开来执行,编写专门的workhorse线程执行密集计算,从而提高了程序的执行效率。

线程从属于进程,是程序的实际执行者。一个进程至少包含一个主线程,也可以有更多的子线程。

线程拥有自己的栈空间。

协程是什么?

协程,英文Coroutines,是一种比线程更加轻量级的存在。正如一个进程可以拥有多个线程一样,一个线程也可以拥有多个协程。协程不是进程或线程,其执行过程更类似于子例程,或者说不带返回值的函数调用。

一个程序可以包含多个协程,可以对比与一个进程包含多个线程,因而下面我们来比较协程和线程。我们知道多个线程相对独立,有自己的上下文,切换受系统控制;而协程也相对独立,有自己的上下文,但是其切换由自己控制,由当前协程切换到其他协程由当前协程来控制。

最重要的是,协程不是被操作系统内核所管理,而完全是由程序所控制(也就是在用户态执行)。这样带来的好处就是性能得到了很大的提升,不会像线程切换那样消耗资源。

什么是进程?什么是线程?什么是协程?相关推荐

  1. Python 37 进程池与线程池 、 协程

    一:进程池与线程池 提交任务的两种方式: 1.同步调用:提交完一个任务之后,就在原地等待,等任务完完整整地运行完毕拿到结果后,再执行下一行代码,会导致任务是串行执行 2.异步调用:提交完一个任务之后, ...

  2. 进程池和线程池,协程,IO多路复用

    进程池.线程池: 开进程池和线程池都是要消耗资源的,只不过比较而言消耗的资源进程池多一点,线程池少一点 就是在计算机硬件能承受的最大范围内去利用计算机. 什么是池? 就是在保证计算机硬件安全的情况最大 ...

  3. python线程池模块_python并发编程之进程池,线程池,协程

    需要注意一下 不能无限的开进程,不能无限的开线程 最常用的就是开进程池,开线程池.其中回调函数非常重要 回调函数其实可以作为一种编程思想,谁好了谁就去掉 只要你用并发,就会有锁的问题,但是你不能一直去 ...

  4. Python进程池,线程池,协程池

    线程池 import threading import time def myThread():for i in range(10):time.sleep()print('d') sep=thread ...

  5. python线程池模块_python并发编程之进程池,线程池,协程(Python标准模块--concurrent.futures(并发未来))...

    需要注意一下 不能无限的开进程,不能无限的开线程 最常用的就是开进程池,开线程池.其中回调函数非常重要 回调函数其实可以作为一种编程思想,谁好了谁就去掉 只要你用并发,就会有锁的问题,但是你不能一直去 ...

  6. python协程池_python3下multiprocessing、threading和gevent性能对比—-暨进程池、线程池和协程池性能对比 | 学步园...

    目前计算机程序一般会遇到两类I/O:硬盘I/O和网络I/O.我就针对网络I/O的场景分析下python3下进程.线程.协程效率的对比.进程采用multiprocessing.Pool进程池,线程是自己 ...

  7. 关于进程线程和Go协程总结

    导语 我们都知道Golang的最大特性就是Goroutine(协程)的设计,那究竟什么是协程呢?它和计算机中的进程和线程又有哪些区别呢?为什么协程可以同时并发,几乎不占内存,想必在你的心中有了类似这样 ...

  8. 一个小故事讲明白进程、线程、Kotlin 协程到底啥关系?

    前言 协程系列文章: 一个小故事讲明白进程.线程.Kotlin 协程到底啥关系? 少年,你可知 Kotlin 协程最初的样子? 讲真,Kotlin 协程的挂起/恢复没那么神秘(故事篇) 讲真,Kotl ...

  9. 异步同步、阻塞非阻塞、异步回调、线程队列和协程

    今天学习了异步同步.阻塞非阻塞.异步回调.线程队列和协程 一.异步同步和阻塞非阻塞 线程的三种状态: 1.就绪 2.运行 3.阻塞 阻塞:遇到了IO操作  代码卡住  无法执行下一行  CPU会切换到 ...

  10. linux 线程切换开销,协程 用户级(内核级)线程 切换开销 协程与异步回调的差异...

    今天先是看到多线程级别的内容,然后又看到协程的内容. 基本的领会是,协程是对异步回调方式的一种变换,同样是在一个线程内,协程通过主动放弃时间片交由其他协程执行来协作,故名协程. 而协程很早就有了,那时 ...

最新文章

  1. java 上传的图片大小为0_JAVA技术:上传图片的缩放处理
  2. 太牛逼了!项目中用了Disruptor之后,性能提升了2.5倍
  3. 单调栈 or 线段树扫描线 ---- E. Delete a Segment [单调栈+二分] [扫描线处理空白位置的技巧乘2]
  4. NopCommerce 增加 Customer Attributes
  5. linux学习治疗,这时代,医生都用VR帮你看病了!
  6. 王京春|大学生智能汽车竞赛感想
  7. Java小程序2(2015-8-2)
  8. codeforces1485 F. Copy or Prefix Sum(dp)
  9. java正则表达式用法示例_Java正则表达式教程及示例
  10. 装修弱电箱,路由器和交换机该怎么放?
  11. Flask-SQLALchemy查询
  12. “程序员的理财计划”-待完善
  13. Matlab中imhist的用法
  14. 下行物理信道rs_LTE下行物理信道与物理信号
  15. 使用arecord、aplay 实现录音和播放
  16. 微波雷达存在感应模组,智能微波感应开关,多普勒雷达原理应用
  17. 普通文档怎么换成php,腾讯在线文档如何转化为普通文档
  18. 唯冠和苹果的“ipad”之争的一点个人看法
  19. stm32 系统进入stop模式_STM32开发笔记78: 2种STOP模式的唤醒方法
  20. MySQL引用ibd_Linux下使用ibd文件实现MySQL的数据导入和使用

热门文章

  1. 腾讯2021批笔试题解
  2. 「镁客早报」美国加州法院暂时冻结了贾跃亭在FF中的股权;最迟明年全国将提供手机卡异地销户服务... 1
  3. java中map转json
  4. Web 前端框架 Angular
  5. 十大Python应用程序
  6. MAC:python操作excel的环境配置
  7. 超有霸气的,有影响力的Java/C++/ASP.NET面试题
  8. 密码学(二):古典密码之维吉尼亚密码的破解
  9. 传奇人物--史蒂夫 乔布斯
  10. 【JVM】Java垃圾回收机制(GC)详解