GMP原理与调度

1.Golang"调度器"的由来

1.1单进程时代不需要调度器

  • 早期的操作系统每个程序就是一个进程,直到一个程序运行完毕,才能进行下一个进程,就是"单进程时代",一切的程序只能串行发生
    在这里插入图片描述
  • 早期的单进程操作系统,面临2个问题
    • 单一的执行流程,计算机只能一个任务一个任务处理
    • 进程阻塞所带来的cpu时间浪费

1.2多进程/线程时代有了调度器需求

  • 在多线程/进程的操作系统中,就解决了阻塞的问题,因为一个进程阻塞cpu可以立刻切换其他进程中去执行,而且调度cpu的算法可以保证在运行的进程都可以被分配到cpu的运行时间片
    在这里插入图片描述
  • 进程拥有太多的资源,进程的创建切换销毁,都会占用很长的时间。

1.3协程来提高cpu利用率

  • 多进程、多线程已经提高了系统的并发能力,但是在当今互联网高并发场景下,为每个任务都创建一个线程是不现实的,因为会消耗大量的内存(进程虚拟内存会占用4GB[32位操作系统],而线程也要大约4MB)

  • 大量的进程/线程出现了新的问题

    • 高内存占用
    • 调度的高消耗CPU
  • 一个“用户态线程”必须要绑定一个“内核态线程”,但是CPU并不知道有“用户态线程”的存在,它只知道它运行的是一个“内核态线程”(Linux的PCB进程控制模块)
    在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值