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

go语言day09 通道 协程的死锁

 Go语言学习——channel的死锁其实没那么复杂 - JackieZheng - 博客园 (cnblogs.com)

目录

通道

创建通道

                1)无缓冲通道

                2)有缓冲通道

通道的使用

               1) 值从通道入口进

               2)  值从通道出口出

        信道死锁:

                  0)死锁现场0

                  1)死锁现场1

                  1.5)总结通道死锁的两个规律。

                  2)死锁现场2

                  3)死锁现场3

            实际运行情况如下:

                解决方案

                  4)死锁现场4

                 


通道

创建通道

                1)无缓冲通道

                        channels := make( chan  string)

                                   make关键字用来创建切片  字典  通道;在这里make创建了通道类型,通道能传输的值是string类型

                                    无缓冲通道不保存值,只负责即时性的传输。当调用通道只有入口或者只有出口时,发生死锁。

                2)有缓冲通道

                        channels := make(chan string,2)

                                    有缓冲通道可以暂时存储值,channels对象可以存储2个字符串类型的变量。

                                

        

通道的使用

                   channels := make( chan  string)

               1) 值从通道入口进

                        channels <- "ping"

               2)  值从通道出口出

                        msg := <- channels

        信道死锁:

                  0)死锁现场0

                                main()单协程中匿名函数中调用无缓冲通道入口,func()并没有加go关键字变成协程。

                                main()会运行到 channels <- int(i)这一步,然后期待main()函数的主协程去接收channels传过来的i值。

                                然而main()主协程也就是它本身,自身等待自身,意思是要它在吃饭的同时还要它喝水。

                        其实把匿名方法 func(){  }外壳去掉也一样 ,因为和匿名方法无关嘛,通道的死锁只和协程之间有关。


                  1)死锁现场1

                                和死锁现场0一样。

                                main函数单协程中只有通道的入口或者出口其一。

                  1.5)总结通道死锁的两个规律。

                                      通道是在协程之间传输数据的。无缓冲通道只存在单协程中调用肯定发生死锁,因为他不能在从入口传输的过程中 又去出口接收值。这项工作至少要两个协程完成。

                                      只有通道的入口或者出口也会死锁。只有入口协程会等一个出口放值;只有出口协程会等待入口传值。


                  2)死锁现场2

                                ch2 只有入口,没有出口 。go func()线程在ch2的入口出就发生死锁。


                  3)死锁现场3

                             main()主协程执行顺序是 

                                       1) 接收 ch1 出口值 , 等待ch1入口传值完成。

                                       2)在完成主协程步骤1)后 ,

                                             再接收 ch2 出口值。

                              go func()副协程执行顺序

                                        1)从 ch2入口 传输 一个值,等待ch2出口传值完成。

                                        2)在完成副协程步骤1)后,

                                             从 ch1 入口 传输 一个值。

                        两个协程间是并行运行的,每个协程都是一个独立执行的单元,这是协程的特点。

                        mian()协程运行到 <- ch1肯定在等待一个ch1的入口传值

                        go func协程运行到 ch2 <-  "ch2 value"  也在等一个ch2的出口传值。

            实际运行情况如下:

                解决方案

                        mian()协程运行到 <- ch2肯定在等待一个ch2的入口传值

                        go func协程运行到 ch2 <-  "ch2 value"  也在等一个ch2的出口传值。

                        这个时候就是标准的双向奔赴了。


                  4)死锁现场4

                        输出完前两个值后,变成无缓冲通道,这个时候再去获取值和死锁现场0,1一样。

                 

相关文章:

go语言day09 通道 协程的死锁

Go语言学习——channel的死锁其实没那么复杂 - JackieZheng - 博客园 (cnblogs.com) 目录 通道 创建通道 1&#xff09;无缓冲通道 2&#xff09;有缓冲通道 通道的使用 1) 值从通道入口进 2) 值从通道出口出 信道死锁&#xff1a; 0&#xff09;死锁现场0 1&#xff09;死…...

黑马的ES课程中的不足

在我自己做项目使用ES的时候&#xff0c;发现了黑马没教的方法&#xff0c;以及一些它项目的小问题 搜索时的匹配方法 这个boolQuery().should 我的项目是通过文章的标题title和内容content来进行搜索 但是黑马它的项目只用了must 如果我们的title和content都用must&#x…...

STM32 中断编程入门

目录 一、中断系统 1、中断的原理 2、中断类型 外部中断 定时器中断 DMA中断 3、中断处理函数 中断标志位清除 中断服务程序退出 二、实际应用 中断控制LED 任务要求 代码示例 中断控制串口通信 任务要求1 代码示例 任务要求2 代码示例 总结 学习目标&…...

使用maven搭建一个SpingBoot项目

1.首先创建一个maven项目 注意选择合适的jdk版本 2.添加依赖 2.在pom.xml中至少添加依赖 spring-boot-starter-web 依赖&#xff0c;目的是引入Tomcat&#xff0c;以及SpringMVC等&#xff0c;使项目具有web功能。 <!-- 引入 包含tomcat&#xff0c;SpringMVC&#xff0c…...

使用 HTTPS 已成为网站的标配了

网站使用HTTPS的原因 背景&#xff1a;十年前&#xff0c;HTTPS并不普遍&#xff0c;但随着网络安全意识的提高&#xff0c;现在已成为网站标配。 网站升级到HTTPS的动机 安全问题&#xff1a;HTTP缺乏安全机制&#xff0c;易被窃取和篡改数据。例如&#xff0c;电信运营商劫…...

前后端分离Nginx

背景 旧的部署方式是将前端代码打包进后端包的resource server {listen 80;listen 443 ssl;server_name xxx.test.com;location / {proxy_pass http://xxx.test.com;} }后端&#xff1a;https:// xxx.test.com/simcard/querySimcard 前端&#xff1a;https:// x…...

【简单讲解下Tauri】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…...

mac上挂载linux目录

在 macOS 上挂载 CentOS 目录步骤&#xff1a; 在挂载前确保 macOS 和 CentOS 在同一个局域网内&#xff0c;并且可以相互访问。如果有网络配置问题&#xff0c;可能会导致挂载失败或连接被拒绝的错误。 要在 macOS 上将 CentOS 的 /disk2/go 目录通过 NFS 挂载到 /Users/zon…...

Linux系统的服务——以Centos7为例

一、Linux系统的服务简介 服务是向外部提供对应功能的进程&#xff0c;其运行在系统后台&#xff0c;能够7*24小时持续不断的提供外界随时发来的服务请求&#xff0c;且服务进程常驻在内存中&#xff0c;具有固定的端口号&#xff0c;通过端口号就能找到服务内容。 提供服务的一…...

Numpy矩阵运算

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl Numpy概述 Numpy是Python的一个开源数值计算扩展库&#xff0c;主要用于存储和处理大型多维数组和矩阵&#xff0c;并且提供了大量的数学函数来操作这些数组。Numpy是Pytho…...

Spring容器Bean之XML配置方式

一、首先看applicationContext.xml里的配置项bean 我们采用xml配置文件的方式对bean进行声明和管理&#xff0c;每一个bean标签都代表着需要被创建的对象并通过property标签可以为该类注入其他依赖对象&#xff0c;通过这种方式Spring容器就可以成功知道我们需要创建那些bean实…...

【Rust入门】生成随机数

文章目录 前言随机数库rand添加rand库到我们的工程生成一个随机数示例代码 总结 前言 在编程中&#xff0c;生成随机数是一种常见的需求&#xff0c;无论是用于数据分析、游戏开发还是模拟实验。Rust提供了强大的库来帮助我们生成随机数。在这篇文章中&#xff0c;我们将通过一…...

普通Java工程如何在代码中引用docker-compose.yml中的environment值

文章目录 一、概述二、常规做法1. 数据库配置分离2. 代码引用配置3. 编写启动类4. 支持打包成可执行包5. 支持可执行包打包成docker镜像6. docker运行 三、存在问题分析四、改进措施1. 包含environment 变量的编排文件2. 修改读取配置文件方式3. 为什么可以这样做 五、运行效果…...

微观特征轮廓尺寸测量:光学3D轮廓仪、共焦显微镜与台阶仪的应用

随着科技进步&#xff0c;显微测量仪器以满足日益增长的微观尺寸测量需求而不断发展进步。多种高精度测量仪器被用于微观尺寸的测量&#xff0c;其中包括光学3D表面轮廓仪&#xff08;白光干涉仪&#xff09;、共聚焦显微镜和台阶仪。有效评估材料表面的微观结构和形貌&#xf…...

Rust开发环境搭建

Rust开发环境搭建 环境 rust: 1.79.0(2024-06-13)1. Rustup下载器在线安装 windows&#xff1a; https://static.rust-lang.org/rustup/dist/x86_64-pc-windows-msvc/rustup-init.exe unix&#xff1a; curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh2. R…...

图文识别0难度上手~基于飞浆对pdf简易ocr并转txt

前言 本篇pdf适用windows对视觉识别0基础的的纯小白用户。大佬请绕道~~ 注意&#xff1a; 本项目pdf的ocr对于表格、画图文字&#xff0c;水印等干扰没做任何处理&#xff0c;因此希望各位使用该功能的pdf尽量不要含有这些干扰项&#xff0c;以免影响翻译效果。 流程 1.构建…...

FFmpeg常用命令手册

官方文档&#xff1a;ffmpeg Documentation 常规选项 -i input_url 输入文件或者输入流的路径 Main 选项 -f fmt (input/output) 强制指定输入或输出文件的格式&#xff0c; 常见的格式名称包括flv&#xff0c;mp4、hls、mpegts、avi、mov -c[:stream_specifier] codec (i…...

CTF入门知识点

CTF知识点 md5函数 <?php$a 123;echo md5($a,true); ?> 括号中true显示输出二进制 替换成false显示输出十六进制绕过 ffifdyop 这个字符串被 md5 哈希了之后会变成 276f722736c95d99e921722cf9ed621c&#xff0c;这个字符串前几位刚好是 or 6 而 Mysql 刚好又会把 …...

Leetcode 完美数

1.题目要求: 对于一个 正整数&#xff0c;如果它和除了它自身以外的所有 正因子 之和相等&#xff0c;我们称它为 「完美数」。给定一个 整数 n&#xff0c; 如果是完美数&#xff0c;返回 true&#xff1b;否则返回 false。示例 1&#xff1a;输入&#xff1a;num 28 输出&a…...

springboot中的定时任务编写

第1部分&#xff1a;引言 1.1 定时任务的重要性 在现代软件开发中&#xff0c;定时任务是应用程序自动化和运维效率的关键组成部分。无论是数据备份、系统健康检查、定期报告生成&#xff0c;还是用户活动触发的自动化流程&#xff0c;定时任务都扮演着不可或缺的角色。它们确…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝

目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为&#xff1a;一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.

ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #&#xff1a…...

深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏

一、引言 在深度学习中&#xff0c;我们训练出的神经网络往往非常庞大&#xff08;比如像 ResNet、YOLOv8、Vision Transformer&#xff09;&#xff0c;虽然精度很高&#xff0c;但“太重”了&#xff0c;运行起来很慢&#xff0c;占用内存大&#xff0c;不适合部署到手机、摄…...

DBLP数据库是什么?

DBLP&#xff08;Digital Bibliography & Library Project&#xff09;Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高&#xff0c;数据库文献更新速度很快&#xff0c;很好地反映了国际计算机科学学术研…...