我是靠谱客的博主 忧心水杯,最近开发中收集的这篇文章主要介绍多线程--进程调度以及进程和线程的关系一. 进程和线程二. 进程调度三. 进程和线程的区别和联系,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

  • 一. 进程和线程
    • 什么是进程
    • 什么是线程
  • 二. 进程调度
  • 三. 进程和线程的区别和联系

一. 进程和线程

进程是操作系统分配资源的单位,线程是调度的基本单位,线程之间共享进程资源

什么是进程

我们在电脑中使用的应用程序都有exe文件, 这个文件被称为可执行文件, 在没有被执行前它只是一个文件, 然而当我们执行这个exe文件之后 ,操作系统会把这个exe加载到内存中, 并且执行exe内部的一些指令. 程序的运行就是进程的创建, 运行到销毁的过程

以下就是windows操作系统在运行的进程
在这里插入图片描述

什么是线程

线程是比进程更小的执行单位, 一个进程可以产生多个线程,与进程不同的是同类的多个线程共享进程的堆和方法区资源,但每个线程有自己的程序计数器、虚拟机栈和本地方法栈.

二. 进程调度

进程调度是指操作系统按某种策略或规则选择进程占用CPU进行运行的过程。
进程调度的优劣直接影响调度的性能, 进程调度的定量评价包括CPU的利用率评价, 进程就绪队列和等待时间之比等.

进入系统的进程会被加到作业队列上, 这个队列包括系统内的所有进程.
驻留在内存中的、就绪的、等待运行的进程保存在就绪队列上。

就绪队列通常用来链表来表示: 其头节点有两个指针,用于指向链表的第一个和最后一个 PCB 块;每个 PCB 还包括一个指针,指向就绪队列的下一个 PCB

创建进程 就是先创建出PCB 然后把PCB加到链表中
销毁进程 就是找到链表中的PCB, 并且从链表上删除

状态

所有进程都要经历3个状态

  1. 就绪态: 进程等待分配CPU
  2. 阻塞态: 等待其他资源释放 或者资源未满足
  3. 运行态: 已经获得资源 占用处理机并且正在执行该进程

抢占式: 容许进程的在运行过程暂停的调度方式 可防止单一进程长时间独占CPU 系统开销大

非抢占式: 让进程一直运行直到结束或阻塞

抢占式优先级算法的系统
系统把处理机分配给优先级最高的进程, 在进程运行期间, 只要出现优先级更高的进程, 进程调度程序就会终止当前进程的执行, 将处理机分配给优先级更高的进程.

上下文切换

PCB(process control block) 进程控制块

PCB通常记载进程相关信息,包括:
程序计数器:接着要运行的指令地址。
进程状态:可以是new、ready、running、waiting或 blocked等。
CPU暂存器:如累加器、索引暂存器(Index register)、堆栈指针以及一般用途暂存器、状况代码等,主要用途在于中断时暂时存储数据,以便稍后继续利用;其数量及类因电脑架构有所差异。
CPU排班法:优先级、排班队列等指针以及其他参数。
存储器管理:如标签页表等。
会计信息:如CPU与实际时间之使用数量、时限、账号、工作或进程号码。
输入输出状态:配置进程使用I/O设备,如磁带机。

一个进程的上下文(context)包括进程的状态、有关变量和数据结构的值、机器寄存器的值和PCB以及有关程序、数据等。
当只在执行的进程发生中断时, 系统要做进程上下文切换, 使得另一个进程得以执行.但另一个进程执行完毕后, 需要恢复中断的进程

三. 进程和线程的区别和联系

进程之间是相互独立的, 进程的创建和销毁开销很大, 线程的开销很低,所以线程比进程更轻量

我们都知道进程里包含很多线程, 但他们之间又存在什么联系呢

线程之间是共享进程资源的, 然而哪些资源是共享, 又有哪些资源是线程私有的呢

线程私有资源
线程的运行本质上就是函数的执行, 函数执行时的局部变量 相关寄存器等信息都保存在栈帧中, 一个栈区的函数不可能访问另一个栈区函数的局部变量, 所以栈区中保存的信息是私有的.
所属线程的栈区、程序计数器、栈指针以及函数运行使用的寄存器是线程私有的.这些信息叫做线程上下文,thread context。
当线程中断后如果想再次运行, 就是通过线程上下文信息来恢复

线程共享资源
全局变量 放在函数外的变量, 可以被所有线程所访问.
堆区中创建的对象, 任何一个线程都可以访问堆区中的数据.

进程之间通信 可以使用管道 套接字socket 消息队列等方式
线程之间通信也就是函数与函数之间的通信

最后

以上就是忧心水杯为你收集整理的多线程--进程调度以及进程和线程的关系一. 进程和线程二. 进程调度三. 进程和线程的区别和联系的全部内容,希望文章能够帮你解决多线程--进程调度以及进程和线程的关系一. 进程和线程二. 进程调度三. 进程和线程的区别和联系所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部