首页 > 系统相关 >线程,进程,协程

线程,进程,协程

时间:2024-10-15 21:23:46浏览次数:6  
标签:协程 调度 式调度 阻塞 线程 切换 进程

线程,进程,协程

进程

是什么:

最小的资源分配单位。

进程上下文切换

​ 指 cpu 保持原有的进程的状态的同时去切换到下一个进程

​ 包含两个主要过程:进程地址空间切换和处理器状态切换

线程

是什么

线程是操作系统中最小的调度单位。

​ 线程是进程的子集,也称为轻量级进程。一个进程可以有多个线程,这些线程由调度器独立管理。一个进程内的所有线程都是相互关联的。

线程上下文切换

​ 线程没有自己的地址空间,同一进程的线程之间切换,他们共享同一进程的地址空间,所以只需要切换处理器状态;不同进程的线程之间切换,会引起进程切换

​ 由于同一进程下的线程上下文切换不引起虚拟地址空间切换,所以它们上下文切换的花销要比进程小很多。

协程

​ 轻量级线程,他的内存占用少,只要 2k,且上下文切换成本低,是一个独立执行的函数,由 go 语言启动

进程调度算法

非抢占式调度

​ 一个非常简单的想法就是让所有员工排队用这台计算机,轮到的这个员工一直使用到自己的所有工作都处理完,才让给下一个同事。

​ 操作系统调度到某个进程之后,不会对进程做任何干预,直到该进程阻塞或者结束,才会切换到其他就绪的进程。

但如果轮到的这个员工处理完自己的工作需要 2 小时,但后几名员工都只需要几分钟,这个排序效率就不够好了。

抢占式调度

​ 操作系统调度到某个进程之后会给它分配一个时间片,如果超过时间片还没有结束或者中途被阻塞,该进程会被操作系统挂起,调度其他进程来执行其他程序。

对比

非抢占式调度:更适合调度可以忍受延迟执行的普通进程。简称:进程被cpu调度了

抢占式调度:更适合调度交互性要求高的实时进程简称:进程只有阻塞或者运行完成之后才能将cpu交给另一个进程

进程的三个状态

  • 运行态
  • 阻塞态
  • 就绪态

运行态到阻塞态 发生IO操作
阻塞态到就绪态 IO操作完成
就绪态到运行态 进程被cpu调度了
运行态到就绪态 时间片用完了

标签:协程,调度,式调度,阻塞,线程,切换,进程
From: https://www.cnblogs.com/guixiangyyds/p/18468484

相关文章

  • uvm_event的变量传递+查看软链接的指向+grep只打印匹配的数据+并行进程的串行化--构建
    uvm_event的变量传递uvm_event可以传递变量,但是变量需要为uvm_object类型,对于package,建议类型向下转换,直接传递uvm_object,并在另一端解析https://www.edaplayground.com/x/RhYcmoduletestbench;classclass1extendsuvm_object;`uvm_object_utils(class1)inta......
  • 【Linux】Linux进程状态与进程优先级
    1.前置知识1.1.并行与并发并发:表示CPU在同⼀个时间内执⾏多个任务并⾏:表示多个CPU在同⼀个时间内执⾏各⾃的任务示意图如下:1.2.时间片时间⽚(timeslice),⼜称为“量⼦(quantum)”或“处理器⽚(processorslice)”,是分时操作系统分配给每个正在运⾏的进程微观上的⼀段CPU时间(在......
  • 【多线程奇妙屋】“线程等待” 专讲,可不要只会 join 来线程等待哦, 建议收藏 ~~~
    本篇会加入个人的所谓鱼式疯言❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言而是理解过并总结出来通俗易懂的大白话,小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的.......
  • Java中多线程的学习
    Java多线程学习总结目录Java多线程学习总结什么是进程什么是线程进程与线程的区别地址空间资源占用健壮性执行过程并发与资源消耗创建线程方式一:继承Thread类,并重写run()方法方式二:实现Runnable接口,并实现run()方法线程的状态线程暂停执行条件线程优先级多线程多线......
  • java爬虫多线程代理:为数据采集提供强力支持
    Java爬虫中的多线程与代理应用在当今这个信息爆炸的时代,数据的获取与处理变得尤为重要。Java作为一种强大的编程语言,广泛应用于爬虫开发中。而在爬虫的实践中,多线程和代理的结合,可以让我们的爬虫如同一支训练有素的队伍,快速、高效地获取所需数据。接下来,我们将深入探讨Java爬......
  • 自定义线程池的使用
    现在有一个使用多线程进行调优的案例:模拟使用多线程并发处理数据。1.自定义一个线程池//自定义一个线程池classThreadPoolManger{privatefinalThreadPoolExecutorexecutor;privatefinalAtomicBooleanisShutdown;/***构造方法,用于初始化线程......
  • 多线程批量插入数据
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、多线程使用背景二、代码实现1.单线程插入2.多线程插入总结前言在面试过程中我们经常会被问到多线程的问题。但是在实际工作过程中可能使用的场景不是特别多,在这边给大家提供一个多......
  • OpenCV高级图形用户界面(11)检查是否有键盘事件发生而不阻塞当前线程函数pollKey()的
    操作系统:ubuntu22.04OpenCV版本:OpenCV4.9IDE:VisualStudioCode编程语言:C++11算法描述轮询已按下的键。函数pollKey无等待地轮询键盘事件。它返回已按下的键的代码或如果没有键自上次调用以来被按下则返回-1。若要等待按键被按下,请使用waitKey。注意waitKey......
  • 单线程与多线程爬虫
    单线程爬虫在执行爬取任务时,程序一次只处理一个任务。这意味着在一个时刻,它只能向一个服务器发送请求,并等待该请求的响应。完成这个请求后,它才会发送下一个请求。单线程爬虫的结构简单,易于理解和实现,但效率较低,特别是在网络延迟较大或需要处理大量数据时。爬虫多为IO密集型程序,......
  • 进程间通信--整理总结
    前言:进程间通信(IPC,Interprocesscommunication)是一组编程接口,让程序员能够协调不同的进程,使之能在一个操作系统里同时运行,并相互传递、交换信息。这使得一个程序能够在同一时间里处理许多用户的要求。因为即使只有一个用户发出要求,也可能导致一个操作系统中多个进程的运行,进程之间......