当前位置: 首页 > news >正文

go语言day15 goroutine

Golang-100-Days/Day16-20(Go语言基础进阶)/day17_Go语言并发Goroutine.md at master · rubyhan1314/Golang-100-Days · GitHub

第2讲-调度器的由来和分析_哔哩哔哩_bilibili

一个进程最多可以创建多少个线程?-CSDN博客

          引入协程

        go语言中内置了协程goroutine;可以简单理解:协程是轻量级的线程,线程是轻量级的进程。

        在Linux的32位操作系统中,创建一个进程需要4G的虚拟内存,创建一个线程需要8MB的虚拟内存。频繁的创建线程会占用内存资源。

        如果是一个单核cpu,在多个线程中来回切换并不是无缝切换:首先cpu把线程A运行的数据从cpu寄存器移动到内存中,这个过程需要时间和内存资源,然后再运行线程B,同样的需要将运行的线程B数据移动到内存。这样的并发效率并不高。

        引入协程,就是为了提高并发效率,减少内存消耗。


         实现协程

                        1)线程绑定

        cpu处理内核空间中的线程,用户空间中的用户线程去绑定内核空间的内核线程。

         1个用户线程对应1个内核线程,线程是这样的1对1关系

         2)P调度器

        go语言初始的调度器实现的是n对1的关系,但是一个协程阻塞,其他协程无法运行。

         3)gmp模型思想

         go语言后来实现的是n:m的多对多关系,未被阻塞的协程可被切换绑定到cpu处理的内核空间的其他线程中处理。

         4)协程绑定

          为什么要去绑定协程和内核线程,内核线程直接由操作系统调度器执行分配给cpu处理,不去绑定的话还需要切换到用户态手动处理,比较麻烦,效率也比不上操作系统直接管理。  

 

         5)gmp模型思维导图

 

        P调用器策略

        work stealing

                空闲的本地队列优先从其他本地队列中偷取协程,如果偷取不到就从全局队列中获取协程。

         hand off

                协程阻塞时其他未阻塞的协程绑定到新线程中处理。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 搜索与下载Stable Diffusion 模型
  • ResT v2 论文解读
  • Python Formulas模型以JSON格式文件导出导入
  • 运行ruoyi
  • 秋招突击——7/23——百度提前批面试准备和正式面试
  • vivado IOSTANDARD
  • 计算机网络-配置双机三层互联(静态路由方式)
  • 独立游戏《星尘异变》UE5 C++程序开发日志8——实现敏感词过滤功能(AC自动机)
  • TCP服务器主动断开客户端
  • WPF项目实战视频《二》(主要为prism框架)
  • Hadoop3:大数据生态圈及相关工作岗位
  • 【python_将一个列表中的几个字典改成二维列表,并删除不需要的列】
  • 刷新当前页面
  • 【Vue】vue两个核心功能声明式渲染_响应式
  • React前端面试每日一试 1.虚拟DOM是什么?
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • Angular Elements 及其运作原理
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • CSS相对定位
  • JS 面试题总结
  • KMP算法及优化
  • leetcode讲解--894. All Possible Full Binary Trees
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 闭包,sync使用细节
  • 初识 beanstalkd
  • 工作手记之html2canvas使用概述
  • 构造函数(constructor)与原型链(prototype)关系
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • ionic异常记录
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ​渐进式Web应用PWA的未来
  • #pragma once
  • #QT(串口助手-界面)
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (14)Hive调优——合并小文件
  • (152)时序收敛--->(02)时序收敛二
  • (Note)C++中的继承方式
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (每日一问)基础知识:堆与栈的区别
  • (十六)串口UART
  • (算法)Travel Information Center
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • /etc/skel 目录作用
  • @Validated和@Valid校验参数区别
  • [ 环境搭建篇 ] 安装 java 环境并配置环境变量(附 JDK1.8 安装包)
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网
  • []FET-430SIM508 研究日志 11.3.31
  • [BJDCTF2020]EzPHP1