Golang并发控制

开发 go 程序的时候,时常需要使用 goroutine 并发处理任务,有时候这些 goroutine 是相互独立的,需要保证并发的数据安全性,也有的时候,goroutine 之间要进行同步与通信,主 goroutine 需要控制它所属的子goroutine。前者并发数据安全依赖锁机制和原子操作,包括互斥锁 sync.Mutex,读写锁 sync.RWMutex,原子操作sync/atomic等,后者涉及到并发行为控制,并发行为控制有三种常见的方式,分别是 WaitGroup,Channel,Context。

1.数据安全性控制(data race)

  • 互斥锁 sync.Mutex
  • 读写锁 sync.RWMutex
  • 原子操作 sync/atomic

2.并发 gorutine 行为控制

  • sync.WaitGroup(等待所有 goroutine 全部结束)
  • channel(可以用有缓冲队列控制 goroutine 的数量,可以用 channel+select 实现 goroutine 间的消息通知)
  • Context(web 场景中,树状的调用结构下,各 goroutine 间消息同步(退出、超时等),父 context 通知所有子 context)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux系统安装部署MySQL完整教程(图文详解)

前言:最近网上翻阅了大量关于Linux安装部署MySQL的教程,在自己部署的时候总是存在一些小问题,例如:版本冲突,配置失败和启动失败等等,功夫不负有心人,最后还是安装部署成功了,所以本…

Ubuntu 网络配置指导手册

一、前言 从Ubuntu 17.10 Artful开始,Netplan取代ifupdown成为默认的配置实用程序,网络管理改成 netplan 方式处理,不在再采用从/etc/network/interfaces 里固定 IP 的配置 ,配置写在 /etc/netplan/01-network-manager-all.yaml 或…

文本预处理——文本处理的基本方法

目录 什么是分词jieba分词特性精确模式分词全模式分词搜索引擎模式分词使用用户自定义词典 命名实体识别词性标注 什么是分词 jieba分词特性 精确模式分词 import jieba content工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作 print(jieba.lcut(co…

一文了解Python中的while循环语句

目录 🥩循环语句是什么 🥩while循环 🥩遍历猜数字 🥩while循环嵌套 🥩while循环嵌套案例 🦐博客主页:大虾好吃吗的博客 🦐专栏地址:Python从入门到精通专栏 循环语句是什…

SpringBoot创建和使用

1.Spring Boot的优点 快速集成框架,Spring Boot提供了启动添加依赖的功能,用于秒级成各种框架。内置运行容器,无需配备Tomcat等Web容器,直接运行和部署程序。快速部署项目,无需外部容器即可启动并运行项目。可以完全抛…

概率论和随机过程的学习和整理--番外15,如何计算N合1的合成数量问题?

目录 1 目标问题:多阶2合1的合成问题 1.1 原始问题 1.2 合成问题要注意,合成的数量 1.3 合成问题不能用马尔科夫链来解决 2 方案1:用合成公式合成多次能解决吗? --不能,解决不了递归的问题 3 方案2,…

idea2021.安装pojie教程

1、下载ideaIU-2021.3应用包,点击finish 2、先关闭idea窗口,等会激活了脚本再运行打开。 3、双击运行install-current-user.vbs,等待一会会提示运行成功。 4、运行后,在文件中会多出一条配置 5、打开运行idea,输入激活码&#x…

如何使用curl下载github代码

首先通过chrome打开想要下载的源文件 如图,有那个下载图标时表示不需要鉴权即可下载,一般仓库都会开放只读权限,所以很大概率都有 比如我想下载这个crc32.c文件 那么我就需要知道它在哪个IP中,按下F12打开网络,点击下载…

pytorch安装GPU版本 (Cuda12.1)教程

使用本教程前,默认您已经安装并配置好了python3以上版本 1. 去官网下载匹配的Cuda Cuda下载地址 当前最高版本的Cuda是12.1 我安装的就是这个版本 小提示:自定义安装可以只选择安装Cuda Runtime。Nvidia全家桶不必全部安装。把全家桶全部安装完直接系统…

ChatGPT助力校招----面试问题分享(十二)

1 ChatGPT每日一题:运算放大器与比较器的区别 问题:运算放大器与比较器的区别 ChatGPT:运算放大器和比较器都是电子电路中常用的模拟电路元件,但它们的设计和应用略有不同。下面是两者的主要区别: 功能不同&#xf…

Java集合之List

ArrayLsit集合 ArrayList集合的特点 ArrayList集合的一些方法 ①.add(Object element) 向列表的尾部添加指定的元素。 ②.size() 返回列表中的元素个数。 ③.get(int index) 返回列表中指定位置的元素,index从0开始。 public class Test {public static void m…

【Vue】day03-VueCli(脚手架)

day03 一、今日目标 1.生命周期 生命周期介绍 生命周期的四个阶段 生命周期钩子 声明周期案例 2.综合案例-小黑记账清单 列表渲染 添加/删除 饼图渲染 3.工程化开发入门 工程化开发和脚手架 项目运行流程 组件化 组件注册 4.综合案例-小兔仙首页 拆分模块-局部…

有名管道(FIFO)的学习笔记

文章目录 有名管道介绍有名管道的使用创建 注意事项 有名管道介绍 有名管道的使用 创建 命令, mkfifo name函数,int mkfifo(const char *pathname, mode_t mode); 设置错误号; 向管道中写数据👇: 从管道读数据&am…

前端Web实战:从零打造一个类Visio的流程图拓扑图绘图工具

前言 大家好,本系列从Web前端实战的角度,给大家分享介绍如何从零打造一个自己专属的绘图工具,实现流程图、拓扑图、脑图等类Visio的绘图工具。 你将收获 免费好用、专属自己的绘图工具前端项目实战学习如何从0搭建一个前端项目等基础框架项…

log4j--动态打印日志文件到指定文件夹

文章目录 log4j--动态打印日志文件到指定文件夹1、添加Maven依赖2、配置文件 log4j.properties3、编写日志打印工具类 LogUtil4、工具类调用 log4j–动态打印日志文件到指定文件夹 1、添加Maven依赖 <!-- log4j日志相关坐标 --><dependency><groupId>org.s…

API Testing 一个基于 YAML 文件的开源接口测试工具

目录 前言&#xff1a; 如何使用&#xff1f; 本地模式 服务端模式 文件格式 后续计划 前言&#xff1a; API Testing 是一个基于 YAML 文件的开源接口测试工具&#xff0c;它可以帮助开发者快速地进行接口测试。 在选择工具时&#xff0c;可以从很多方面进行考量、对比…

【Matlab】基于遗传算法优化 BP 神经网络的数据回归预测(Excel可直接替换数据)

【Matlab】基于遗传算法优化 BP 神经网络的数据回归预测&#xff08;Excel可直接替换数据&#xff09; 1.模型原理2.文件结构3.Excel数据4.分块代码4.1 arithXover.m4.2 delta.m4.3 ga.m4.4 gabpEval.m4.5 initializega.m4.6 maxGenTerm.m4.7 nonUnifMutation.m4.8 normGeomSel…

Pytorch:利用torchvision调用各种网络的预训练模型,完成CIFAR10数据集的各种分类任务

2023.7.19 cifar10百科&#xff1a; [ 数据集 ] CIFAR-10 数据集介绍_cifar10_Horizon Max的博客-CSDN博客 torchvision各种预训练模型的调用方法&#xff1a; pytorch最全预训练模型下载与调用_pytorch预训练模型下载_Jorbol的博客-CSDN博客 CIFAR10数据集下载并转换为图片&am…

vue中export和export default的使用

<script> export default {name: HelloWorld } $(function () {alert(引入成功) }) </script> 1、export的使用 比喻index.js要使用test.js中的数据&#xff0c;首先在test.js文件中进行导出操作 代码如下&#xff1a; export function list() {alert("list…

【表达式引擎】简单高效的轻量级Java表达式引擎:Aviator

简单高效的轻量级表达式引擎&#xff1a;Aviator 前言 Aviator 是一个高性能、、轻量级的表达式引擎&#xff0c;支持表达式动态求值。其设计目标为轻量级和高性能&#xff0c;相比于 Groovy 和 JRuby 的笨重&#xff0c;Aviator 就显得更加的小巧。与其他的轻量级表达式引擎不…