唤醒手腕 Go 语言 并发编程、Channel通道、Context 详细教程(更新中)

news2024/11/19 5:30:52

并发编程概述

​ 一个进程可以包含多个线程,这些线程运行的一定是同一个程序(进程==程序),且都由当前进程中已经存在的线程通过系统调用的方式创建出来。进程是资源分配的基本单位,线程是调度运行的基本单位,线程不可独立于进程存在。

​ 所有线程都有自己的线程栈,以此存放自己的私有数据(包含在进程的虚拟内存地址中)。一个进程中的很多资源也会被线程所共享,包括在当前进程虚拟内存地址中存放的代码段、数据段、堆、信号处理函数、文件描述符(非负整数)。正因如此,创建一个线程时不会像创建一个进程时那样耗费资源,因为其大多数资源都因共享而无需被复制。

什么是协程?

在这里插入图片描述

Go 语言线程模型

Go 语言本身是为并发而打造的语言。那它的线程模型是怎么样的呢?

传统是怎么处理是这样的,把数据放到共享内存,给多线程使用,这个方式是不是看上去非常简单,但是在并发访问的控制上就变的很复杂。

Go 语言的是这么处理的,它不推荐用共享内存的方式传递数据,它推荐使用 channel。channel主要用来在多个 Go 语句片段之前传递数据,这样做还会保证并发的安全性。不过 Go 还是保留了传统的方法(互斥量、条件变量等)。

了解 Go 的线程模型之前,我们需要知道 Go 的核心元素,它们支撑起了这个模型的主框架。

参数说明
M(machine)一个M对应一个内核线程。
P(processor)一个P代表执行一个Go代码片段必需的资源。
G(goroutine)一个G代表Go代码片段。

Go 语言 Channel 通道

在 Go 语言中管道类似于一个数据流,每次放入或者取出一部分数据,数据取出后原通道内的数据就删除掉,在linux操作系统中管道会将函数的返回结果作为下一个函数的参数

channel 产生背景

线程之间进行通信的时候,会因为资源的争夺而产生竟态问题,为了保证数据交换的正确性,必须使用互斥量给内存进行加锁,Go 语言并发的模型是 CSP,提倡通过通信共享内存,而不是通过共享内存而实现通信,通道恰巧满足这种需求。

channel 工作方式

channel 类似与一个队列,满足先进先出的规则,严格保证收发数据的顺序,每一个通道只能通过固定类型的数据。如果通道进行大型结构体、字符串的传输,可以将对应的指针传进去,尽量的节省空间

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CentOS 7安装配置docker

CentOS 7、8安装、配置docker 这里宿主机的型号选择是centos7.9.2009的版本 1.宿主机关闭防火墙和selinux,配置ipv4 #设置SELinuxdisabled vim /etc/selinux/config SELinuxdisabled 查看防火墙状态:firewall-cmd --state 关闭防火墙:syst…

C# WinForm —— 14 CheckedListBox 复选列表框介绍

1. 简介 类似 ListBox,提供项的列表,区别就是 CheckedListBox 每一个项前面有个复选框 2. 常用属性 属性解释(Name)控件ID,在代码里引用的时候会用到,一般以 ckl 开头BackColor背景颜色BoderStyle边框样式:无、FixedSingle、F…

探索静态住宅代理IP:网络安全的隐形守护者

在当今这个数字化高速发展的时代,网络安全问题愈发凸显其重要性。无论是企业级的网络运营,还是个人用户的网络活动,都需要一个安全、稳定的网络环境。而在这个环境中,静态住宅代理IP以其独特的优势,逐渐成为了网络安全…

如何通过PHP语言实现远程控制空调

如何通过PHP语言实现远程控制空调呢? 本文描述了使用PHP语言调用HTTP接口,实现控制空调,通过不同规格的通断器,来控制不同功率的空调的电源。 可选用产品:可根据实际场景需求,选择对应的规格 序号设备名称…

Go实现树莓派I2C读取SHT30温度湿度传感器

简介 树莓派其实本身包含很多资源引脚, 合理利用其实可以自制智能家居的一部分,本身硬件和Linux系统等高级语言支持加生态, 不说了, 做就好了… I2C 功能开启 参考之前的文章就可以了 Go实现树莓派读取bh1750光照强度 查看I2C总…

linux性能监控之top

说完了atop和htop,我们在来说说Linux自带的top,我们先看看命令效果: 可以看到是一个实时的系统监控工具,提供了一个动态的、交互式的实时视图,显示系统的整体性能信息以及正在运行的进程的相关信息。 我们先来解析下命…

重学java 35.API 6.包装类

心有所念,必有所灵 —— 24.5.10 一、基本数据类型对应的引用数据类型(包装类) 1概述 就是基本类型所对应的类(包装类),我们需要将基本类型转为包装类,从而让基本类型拥有类的特性(是基本类型可以使用包装类…

聊聊ChatGPT:智能语言模型背后的原理

目录 1. ChatGPT的基础:GPT模型 2. 预训练与微调:让模型更加智能 2.1 预训练 2.2 微调 3. 多样化的应用场景 4. 未来的展望 5. 结语 在当今的人工智能领域,OpenAI的ChatGPT无疑是一个炙手可热的话题。它不仅能流畅地进行对话&#xff…

Databend 开源周报第 143 期

Databend 是一款现代云数仓。专为弹性和高效设计,为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务:https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展,遇到更贴近你心意的 Databend 。 了解 Databend …

工控组态技术:实现工业自动化控制的重要手段

体验地址:by组态[web组态插件] 工控组态技术是一种应用于工业自动化控制领域的重要技术,它通过将各种不同的硬件设备和软件系统进行组合和配置,实现了工业生产过程的自动化控制和优化。 随着工业技术的不断发展和进步,工控组态技…

解锁Spring Cloud Gateway与Nginx最強配置,构建未来网络高速公路!(下)

文章目录 5. 监控与日志5.1 Nginx访问日志与错误日志配置访问日志配置错误日志配置 5.2 Spring Cloud Gateway的日志记录与监控集成日志记录监控集成微服务监控 6. 故障排查与常见问题6.1 配置错误常见原因与解决语法错误监听端口冲突路由规则不匹配 6.2 性能瓶颈识别与优化建议…

Navicat Data Modeler Ess for Mac:强大的数据库建模设计软件

Navicat Data Modeler Ess for Mac是一款专为Mac用户设计的数据库建模与设计工具,凭借其强大的功能和直观的界面,帮助用户轻松构建和管理复杂的数据库模型。 Navicat Data Modeler Ess for Mac v3.3.17中文直装版下载 这款软件支持多种数据库系统&#x…

OmniPlan Pro 4 for Mac中文激活版:项目管理的新选择

OmniPlan Pro 4 for Mac作为一款专为Mac用户设计的项目管理软件,为用户提供了全新的项目管理体验。其直观易用的界面和强大的功能特性,使用户能够轻松上手并快速掌握项目管理要点。 首先,OmniPlan Pro 4 for Mac支持自定义视图,用…

鸿蒙内核源码分析(VFS篇) | 文件系统和谐共处的基础

基本概念 | 官方定义 VFS(Virtual File System)是文件系统的虚拟层,它不是一个实际的文件系统,而是一个异构文件系统之上的软件粘合层,为用户提供统一的类Unix文件操作接口。由于不同类型的文件系统接口不统一&#x…

开源相机管理库Aravis例程学习(七)——chunk-parser

开源相机管理库Aravis例程学习(七)——chunk-parser 简介例程代码函数说明arv_camera_create_chunk_parserarv_camera_set_chunksarv_chunk_parser_get_integer_value 简介 本文针对官方例程中的:05-chunk-parser做简单的讲解。并介绍其中调…

钓场是怎么收费看时间的,钓鱼钓虾计时计费管理系统软件

钓场是怎么收费看时间的,钓鱼钓虾计时计费管理系统软件 一、前言 以下软件操作教程以,佳易王钓场计时计费管理软件为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 佳易王钓场计时计费管理软件,支持百人或千人…

sql-labs通关详解(1-10)

1.less-1 1.判断类型 由此判断是字符型漏洞由单引号闭合。 2.判断 字段个数 http://192.168.190.145/sqli-labs/Less-1/?id1 order by 3-- 3.获取数据库名 -1 union select 1,2,database()-- 4.获取表名 -1 union select 1,2,group_concat(table_name) from information_…

权限束缚术--权限提升你需要知道这些

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文主要对渗透测试中权限提升的一些基础知识进行整理 并不包含权限提升的具体操作 适合要入门权限提升的朋友 提权的重要性 我们在渗透网站时,我们往往会拿到一些权限,但是我们的权限有…

目标检测算法YOLOv7简介

YOLOv7由Chien-Yao Wang等人于2022年提出,论文名为:《YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors》,论文见:https://arxiv.org/pdf/2207.02696 ,项目网页&#xff…

HC-05的简介与使用

蓝牙概述 蓝牙(Bluetooth)是一种用于无线通信的技术标准,允许设备在短距离内进行数据交换和通信。它是由爱立信(Ericsson)公司在1994年推出的,以取代传统的有线连接方式,使设备之间能够实现低功…