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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/383526.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

星环科技携手东华软件推出一表通报送联合解决方案

随着国家金融监督管理总局“一表通”试点工作的持续推进,星环科技携手东华软件推出了基于星环科技分布式分析型数据库ArgoDB和大数据基础平台TDH的一表通报送联合解决方案,并已在多地实施落地中得到充分验证。 星环科技与东华软件作为战略合作伙伴&…

论文阅读【检测】:Facebook ECCV2020 | DETR

文章目录 论文地址AbstractMotivation模型框架详细结构小结 论文地址 DETR Abstract 提出了一种将目标检测视为直接集预测问题的新方法。简化了检测pipeline,有效地消除了许多手工设计的组件的需求,例如非最大抑制过程或锚生成,这些组件明…

802.11无线网络权威指南(二):无线帧结构

802.11无线网络权威指南(二):无线帧结构 无线协议桢的三种类型无线网络帧结构完整帧格式control frameDuration/IDAddressSequence ControlQoS ControlHT Control 字段Frame Body 帧体FCS 校验域 帧细节管理帧控制帧RTS 帧CTS 帧ACK 帧格式PS…

ceph log内容解析

log内容构造 如osd的一条log 分别表示 时间戳 线程id 日志等级 子模块 内容实体 剖析源码实现 每条log都是由一个Entry构成 定义在src/log/entry.h中 Entry(short pr, short sub) :m_stamp(clock().now()), // 打印日志时的时间戳m_thread(pthread_self()), // 打印日志的线…

redis的持久化方式

目录 1. 什么是持久化? 2. redis实现持久化的方式 2.1 什么是RDB? 2.2 什么时候会触发RDB模式? 2.2.1 手动触发 2.2.2 自动触发 2.3 什么是Aof? 2.3.1 开启Aof 2.4 RBD和AOF的区别 1. 什么是持久化? 把内存中…

el-table列的显示与隐藏

需求:实现 表字段的显示与隐藏。效果图 代码实现 写在前面 首先 我部分字段有自定义的排序逻辑,和默认值或者 数据的计算 所以是不能简单的使用 v-for 循环column 。然后 我需要默认展示一部分字段,并且 当表无数据时 提示不能 显示隐藏 …

AIGC Kolors可图IP-Adapter-Plus风格参考模型使用案例

参考: https://huggingface.co/Kwai-Kolors/Kolors-IP-Adapter-Plus 代码环境安装: git clone https://github.com/Kwai-Kolors/Kolors cd Kolors conda create --name kolors python=3.8 conda activate kolors pip install -r requirements.txt python3 setup.py install…

mybatis一对多 多对多

一对一 方式一: ,在result的property属性用user.XXX 方式二:把user对象的属性用resultMap标签包含在association标签里,user的id做id标签,特点是返回值是对象的标识,而集合是collection 一对多 在user类加了个订单的集合,表示一个用户有多个订单 这接口当然是user的 分为re…

PWM信号转模拟信号转换器GP8101/GP8101M

前言: 各位大佬,听说过PAC吗?PAC (PWM to Analog Converter)。 今天介绍一个小众的转换芯片,PWM转模拟信号的,有一定的应用场景,单价一元多。这种芯片隔离PWM还是很容易的。 0%-100% PWM to 0-5V/0-10V SOP8封装的GP…

HarmonyOS三方库的使用

系统组件难以提供比较优秀的界面,需要第三方库来实现一些比较好看的界面效果 三方库的获取: 开源社区支持OpenHarmony-TPC 和 Openharmony三方库中心仓 先目前已经拥有各种各样的三方库,包括UI 图片 动画 网络 数据存储 工具类 多媒体 安全等…

redis数据类型介绍

Redis 支持多种数据类型,包括: 1.字符串(String):最简单的数据类型,可以存储字符串、数字等。 2.哈希(Hash):类似于 Map,可以存储键值对,其中键值…

Go语言编程 学习笔记整理 第2章 顺序编程 后半部分

1.流程控制 1.1 条件语句 if a < 5 { return 0 } else { return 1 } 注意&#xff1a;在有返回值的函数中&#xff0c;不允许将“最终的”return语句包含在if...else...结构中&#xff0c; 否则会编译失败&#xff01;&#xff01;&#xff01; func example(x int) i…

leetcode 2236.判断根节点是否等于字节点

1.题目要求: 给你一个 二叉树 的根结点 root&#xff0c;该二叉树由恰好 3 个结点组成&#xff1a;根结点、左子结点和右子结点。如果根结点值等于两个子结点值之和&#xff0c;返回 true &#xff0c;否则返回 false 。2.思路: 直接数组前序遍历&#xff0c;然后判断后面两个…

【C++】:红黑树深度剖析 --- 手撕红黑树!

目录 前言一&#xff0c;红黑树的概念二&#xff0c;红黑树的性质三&#xff0c;红黑树节点的定义四&#xff0c;红黑树的插入操作4.1 第一步4.2 第二步4.3 插入操作的完整代码 五&#xff0c;红黑树的验证六&#xff0c;实现红黑树的完整代码五&#xff0c;红黑树与AVL树的比较…

【接口自动化_08课_Pytest+Yaml+Allure框架】

上节课一些内容 的补充 1、openxl这个方法&#xff0c;第一个元素是从1开始的&#xff0c;不是从0开始 回写的列在程序里写的是11&#xff0c;是因为是固定值 一、1. Yaml入门及应用 1、什么是yaml YAML&#xff08;/ˈjməl/&#xff0c;尾音类似camel骆驼&#xff09;是一…

单向链表

目录 思维导图&#xff1a; 学习内容&#xff1a; 1. 链表的引入 1.1 顺序表的优缺点 1.1.1 优点 1.1.2 不足 1.1.3 缺点 1.2 链表的概念 1.2.1 链式存储的线性表叫做链表 1.2.2 链表的基础概念 1.3 链表的分类 2. 单向链表 2.1 节点结构体类型 2.2 创建链表 2.…

EXCEL 排名(RANK,COUNTIFS)

1.单列排序 需求描述&#xff1a;如有下面表格&#xff0c;需要按笔试成绩整体排名。 解决步骤&#xff1a; 我们使用RANK函数即可实现单列整体排名。 Number 选择第一列。 Ref 选择这一整列&#xff08;CtrlShift向下箭头、再按F4&#xff09;。 "确定"即可计算…

图像分类算法概述:深度学习方法

图像分类算法概述&#xff1a;深度学习方法 图像分类是计算机视觉中的一个基本任务&#xff0c;近年来随着深度学习的发展&#xff0c;图像分类算法取得了巨大的进步。本文将概述主要的深度学习图像分类算法。 #mermaid-svg-fkTtkPLl9ahuVT6w {font-family:"trebuchet ms…

BGP选路之Preferred value

原理概述 当一台BGP路由器中存在多条去往同一目标网络的BGP路由时&#xff0c;BGP协议会对这些BGP路由的属性进行比较&#xff0c;以确定去往该目标网络的最优BGP路由&#xff0c;然后将该最优BGP路由与去往同一目标网络的其他协议路由进行比较&#xff0c;从而决定是否将该最优…

元组(tuple)

目录 一、基本介绍 1、元组(tuple)可以存放多个不同数据类型&#xff0c;元组是不可变序列 2、元组也是一种数据类型 二、元组的定义 1、元组的定义 2、代码说明 三、元组的使用 1、元组使用语法 2、举例说明 3、代码演示&#xff0c;访问/获取第三个数据/元素 四、…