1.进程的基本概念

进程简单说就是运行中的可执行文件。代码经过编译后生成二进制可执行文件,当运行该可执行文件时,代码被装载到内存中,然后CPU会执行程序中的指令。

有关进程调度,例如进程A,进程B,CPU不需要阻塞等待进程A数据的返回,而是去执行进程B。当进程A数据返回时,CPU会收到一个中断,然后CPU继续运行A进程,即多个进程交替进行。

1.1.进程的并发和并行有什么区别?

如下图所示,并发是进程交替运行,而并行则是两个进程同时运行。

1.2.进程的状态

运行状态:当前占用CPU;

就绪状态:可以运行,但是当前CPU正在运行其它进程而暂停;

阻塞状态:正在等待某一事件,而暂时停止运行。

1.3.进程的控制结构

操作系统使用进程控制结构PCB(process control block)数据结构来描述进程,PCB是进程存在的唯一标识,随着进程消失,相应的PCB信息也将消失。

那么PCB是如何组织的呢?一种方式是链表,把具有相同状态的进程链在一起,组成各种队列,如就绪队列,阻塞队列等;另外一种方式是索引,将同一状态的进程组织在一个索引表中,索引表项指向相应的PCB,不同状态对应不同的索引表。进程创建、销毁等调度导致的进程状态会变化,由于链表较索引更灵活处理插入和删除,所以一般选链表。

1.4.进程的控制

a) 进程创建

一个进程可以创建多个进程,子进程可以继承父进程所拥有的资源,当子进程被终止时,其在父进程处继承的资源均还给父进程,当父进程终止时,子进程也会同时终止。进程创建时,会分配一个唯一的进程标识号,并申请并初始化一个PCB, 然后根据进程的调度队列,将新进程插入到相应的队列,等待被调度运行。

b) 进程的终止

进程的终止方式可以分为正常结束、异常结束、外界干预(调用kill命令)。终止进程过程:

  • 首先查找要终止的进程PCB;

  • 如果处于执行状态,立即终止该进程包括所有子进程的执行,然后将CPU资源分配给其它进程;

  • 将其从PCB所在的队列中删除;

1.5.进程的上下文切换

进程是共享CPU资源的,根据资源调度的需要,进程之间会进行切换,即进程的上下文切换。CPU根据寄存器和程序计数器,来确定任务从哪儿加载以及从哪儿开始运行。CPU寄存器是一个容量小,速度快的内存;程序计数器是用来存储CPU正在执行或者即将执行的指令位置。CPU寄存器和程序计数器构成了CPU上下文。CPU上下文切换就是把前一个任务的CPU上下文保存起来,然后加载新任务的上下文到CPU寄存器和程序计数器,最后再跳转到程序计数器所指的新位置,运行新任务。系统内核会保存上下文信息,当此任务再次被分配给CPU运行时,CPU会重新加载该上下文。

进程的上下文切换包括用户空间资源如虚拟内存、栈、全局变量等,以及内核的堆栈、寄存器等内核空间的资源。通常会把交换的信息保存在进程的PCB,当运行另外一个进程的时候,从该进程的PCB取出上下文,然后恢复到CPU中,使得这个进程可以继续执行。如下图所示:

上下文切换包含以下部分:

a)CPU时间被划分为一段段的时间片,这些时间片被轮流分配给各个进程,当某个进程的时间片耗尽后,就会被系统挂起,切换到其它正在等待的进程运行;

b)当进程通过sleep函数主动将自己挂起时,CPU也会重新调度;

c)当有优先级更高的进程运行时,当前低优先级的进程会被挂起,从而先运行高优先级的进程;

d)当发生硬件中断时,CPU的进程会被中断挂起,然后执行内核中的中断服务程序。

2.线程

早期进程为独立运行的基本单位,由于进程之间通信、共享数据、维护等开销较大,特别是进程创建时,分配资源、建立PCB;终止进程时,回收资源,撤销PCB;进程切换时,保存当前进程的状态信息等。所以后面引入了更小且独立运行的基本单位线程。线程是进程中的一条执行流程,具有如下特点:

a)实体之间可以并发运行

b)实体之间可以共享相同的地址空间

c)如果进程中的一个线程崩了,会导致整个进程的线程崩掉;

d)进程是资源分配的基本单位,线程是CPU调度的基本单位,线程只独享寄存器和栈;

e)线程与进程的基本状态相同,同样具有状态之间的转换关系;

f)线程能降低并发执行的时间和空间开销,如线程创建和终止时间快,线程切换快,线程间的数据交换快;

同一个进程内,多个线程之间可以共享代码段、数据段、打开的文件等资源,但每个线程都有独立一套寄存器和栈,这样可以确保线程的控制流是相对独立的。

操作系统的任务调度的对象就是线程,而进程只是给线程提供了虚拟内存、全局变量等资源。当进程只有一个线程时,进程就是线程;当进程包含多个线程时,线程会共享相同的虚拟内存和全局变量资源。线程也有自己独立的数据,比如栈和寄存器等,当上下文切换时需要保存的。

线程上下文切换是发生在同一个进程中的不同线程,切换的是属于线程独立的数据,如寄存器、私有数据等;

线程的实现方式,包含以下三种:

a)用户线程,在用户空间实现的线程,是由用户态的线程库来完成线程管理;每个进程都有线程控制块TCB列表,用来跟踪记录线程状态信息

b)内核线程,在内核中实现的线程,是由操作系统管理,

c)轻量级进程,在内核中来支持用户线程;

内核线程和用户线程存在一定的对应关系,

a) 多个用户线程对应一个内核线程;

b) 一个用户线程对应到一个内核线程;

c) 多个用户线程对应到多个内核线程;

综上,简单总结了部分进程和线程的相关知识。

c++ 等待子线程结束_进程和线程相关推荐

  1. c++ 等待子线程结束_?进程、线程、以及它们之间的区别与联系

    一.进程简介 1.1 进程概念的引入 计算机中,CPU是最宝贵的资源,为了提高CPU的利用率,引入了多道程序设计的概念.当内存中多个程序存在时,如果不对人们熟悉的"程序"的概念加以 ...

  2. java中进程和线程的区别和联系_进程和线程有什么联系和区别?

    1.定义: 1) 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位. 2) 线程是进程的一个实体,是CPU调度和分派的基本单位,他是比进程更小的能独 ...

  3. api windows 线程加锁_Windows 进程与线程管理

    第六章 进程与线程管理 本章我们把注意力集中到Windows 的进程.线程与作业对象上.正如我们在前面的章节中所述的,Windows的设计以基于对象的思想作为基础.在本章的第一节中,主要介绍进程与线程 ...

  4. c++主线程等待子线程结束_简单明了的 Python 多线程来了 | 原力计划

    作者 | 万里羊责编 | 王晓曼出品 | CSDN博客线程和进程计算机的核心是CPU,它承担了所有的计算任务,就像是一座工厂在时刻运行.如果工厂的资源有限,一次只能供一个车间来使用,也就是说当一个车间 ...

  5. python判断线程结束_判断Threading.start新线程是否执行完毕的实例

    新写自己的Threading类 class MyThread(threading.Thread):#我的Thread类 判断流程结束没 用于os shell命令是否执行判断 def __init__( ...

  6. python是如何实现进程池和线程池的_进程、线程、线程池和协程如何理解?

    1.进程.线程.线程池的概念 进程是一个动态的过程,是一个活动的实体.简单来说,一个应用程序的运行就可以被看做是一个进程,而线程,是运行中的实际的任务执行者.可以说,进程中包含了多个可以同时运行的线程 ...

  7. 操作系统的线程和进程的区别_进程,线程,协程,有何区别?

    进程 ​ cpu是计算机的核心,主要处理计算机的计算任务.操作系统是计算机的管理员,它负责任务的调度,资源的管理和分配,统一管理计算机的硬件资源.应用程序则是具有某种功能的程序,应用程序运行于操作系统 ...

  8. c++时间片轮转rr进程调度算法_进程,线程基础(—)

    进程 进程简单的定义是指装载到内存的指令集并且正在由cpu执行其中的每一条指令的这个程序叫做进程. 进程控制块 process control block 简称PCB,主要包含了标识符,状态,优先级, ...

  9. 协程 进程_进程,线程,协程的关系

    对于很多WEB服务器的开发人员,编程前几年大多以实现业务代码为主,很少接触或者系统的学习服务器的进程,线程,协成的概念和应用,下面我就进程,线程,协成在Nginx服务器中的应用对比浅析: 关系图: 概 ...

最新文章

  1. R语言生存分析(survival analysis)与生存资料有关的概念详解
  2. 解决java.lang.UnsupportedClassVersionError
  3. 什么?超过60%的开发者都开始从Java 8 升级到 Java 11了?
  4. Java:选择排序法
  5. Spring Boot + Spring Data + Elasticsearch实例
  6. centos rpm安装zabbix
  7. 解析全球热点安全事件背后的玄机
  8. NUC1474 Ants【水题】
  9. MATLAB规划和LINGO规划,[数学建模]线性规划与matlab,lingo解法
  10. c语言贪吃蛇积分用什么函数,C语言之贪吃蛇(curses库函数)
  11. jquery选择器篇
  12. 5G学习之路——认识基站、扇区、小区
  13. oracle lob值是什么,oracle LOB介绍
  14. 字符串之重复字符统计
  15. 张博涵清华大学_2009年北大,清华提前录取保送生人数最多的 33所中学
  16. GB_T28181-2016.pdf
  17. 北洋 BTP-R380 打印机驱动
  18. 计算机电子钢琴,电脑钢琴调律
  19. 3D引擎优化方法整理
  20. 关闭互斥体实现微信多开,适用于现在所有版本

热门文章

  1. java tostring 格式化日期_ASP.NET格式化日期
  2. 星三角正反接线实物图_实物讲解星三角降压启动接线图
  3. i3处理器能运行python吗_老cpu(10年前的core i3 不支持avx指令集)安装tensorflow2.0...
  4. erp从内部集成起步第3版下载_SCM与ERP的区别在哪里呢?
  5. CCS3.3之DM642开发环境建立
  6. asp.net mvc5+Echarts3.0+AspNet.SignalR2.0 实时监控cpu占用率推送
  7. 李炎恢的课程中心(JQUERY视频)
  8. jquery读写cookie
  9. c语言编程sinx泰勒公式_大白话5分钟带你走进人工智能-第12节梯度下降之原理泰勒公式(7)...
  10. JAVA基础:从一道面试题看逻辑运算符与、|与||的区别