博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
进程、线程和协程
阅读量:5945 次
发布时间:2019-06-19

本文共 1568 字,大约阅读时间需要 5 分钟。

名次解释 

  1、进程

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

  进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。它不只是程序的,还包括当前的活动,通过的值和处理的内容来表示。

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

  2、线程

  线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令 (PC), 集合和 组 成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个 进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程 在运行中呈现出间断性。线程也有 、 和 三种基本状态。就绪状态是指线程具备运行的所有条件,逻辑上可以运行,在等待处理机;运行状态是指线程占有处理机正在运行;阻塞状态是指线程在等待一个事件(如某个信号量),逻辑上不可执行。每一个程序都至少有一个线程,若程序只有一个线程,那就是程序本身。
线程是程序中一个单一的顺序控制流程。进程内一个相对独立的、可调度的执行单元,是系统独立调度和分派CPU的基本单位指 中的程序的调度单位。在单个程序中同时运行多个线程完成不同的工作,称为 。
  线程是程序中一个单一的顺序控制流程。进程内一个相对独立的、可调度的执行单元,是系统独立调度和分派CPU的基本单位指 中的程序的调度单位。在单个程序中同时运行多个线程完成不同的工作,称为 。

  3、协程

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

区别与联系

一句话总结

进程:资源分配的最小单元。早期面向进程的程序设计中进程是基本执行体;面向线程的程序设计中,进程是线程的容器,线程干活,每个进程至少有一个线程。

线程:CPU调度执行的最小单元。真正干活的。为了提高CPU的利用率和执行多任务。

协程:可协同执行的线程。也是干活的。非系统调度,协程之间调度。

 

资源方面

多进程:子进程和父进程有不同的代码块与资源

多线程:多个线程公用父进程的资源,线程自己不拥有资源

多协程:可以共享上下文

 

开销和切换成本

进程上下文切换成本很高,需要寄存很多东西

线程切换成本较低,占用资源较少

协程是非常轻量级的用户态线程,程序自己调度,切换基本没有成本

 

调度方面

进程是系统调度

线程是系统调度

协程是程序自身实现调度

转载于:https://www.cnblogs.com/gauze/p/10327660.html

你可能感兴趣的文章
HDU-4335 What is N? 欧拉函数,欧拉定理
查看>>
HDU 1044 Collect More Jewels(搜索,先bfs再dfs)
查看>>
使用RabbitMQ过程中遇到的一个问题(队列为空,但内存暴涨)以及与开发者的邮件沟通...
查看>>
C++/C学习笔记(九)
查看>>
ASP.net MVC 中Security.FormsAuthentication验证用户的状态(匿名|已登录)
查看>>
《C++ Primer》 Part III(Classes and Data Abstraction)
查看>>
FriendlyUrls——在ASP.NET Web表单中使用更友好的URL
查看>>
【javascript】字符串对象常用 api
查看>>
对PostgreSQL中 index only scan 的初步理解
查看>>
poj 2337 Catenyms
查看>>
第46周星期二
查看>>
hdu1231-最大连续子序列
查看>>
TMG阵列部署选择
查看>>
Repeater 控件 当数据源没有数据的时候显示 暂无数据 的两种方式
查看>>
大型网站的架构设计图分享-转
查看>>
9.15游戏化体验的原则初探
查看>>
(function(){...}())与(function(){...})()
查看>>
css实现气泡框效果
查看>>
【原创】已知四个坐标点求其两条直线交点坐标
查看>>
request 路径随笔
查看>>