Go学习之路:并发(DAY 3)

news2024/11/26 23:48:34

文章目录

    • 前引
    • 并发
      • 1、Go协程/简单创建
      • 2.1、信道/简单创建信道
      • 2.2、信道/限制了大小的信道
      • 2.3、信道/range close信道
      • 3.1、Select语句


前引


听了会歌 一看了下今天已经下午2:50了
我们学校也好像开始放学生们回家了

那今天最后就愉快愉快的把我们的 A Tour Of Go 最后一程给送走吧
并发


并发


1、Go协程/简单创建


goroutine 大名鼎鼎的Go协程 原语言支持的协程
简单测试一下吧 这里也就是简单介绍


package main

import "fmt"

func TestGoroutine(str *string) {
	fmt.Println(*str)
}

func main() {
	str := "hello"
	teststr := "say hello"
	go TestGoroutine(&str)
	TestGoroutine(&teststr)
}

运行效果
在这里插入图片描述


2.1、信道/简单创建信道


可以把其作为linux中的共享信道 作为pipe用
其实我个人认为就是pipe 而pipe在linux作为共享进程的通讯工具

这个就作为go中独有的channel 下面是简单应用


package main

import "fmt"

func TestGoroutine(str *string) {
	fmt.Println(*str)
}

func Sum(slice []int, channel chan int) {
	sum := 0
	for _, num := range slice {
		sum += num
	}
	channel <- sum
}

func main() {
	slice := []int{1, 2, 3, 4, 5, 10, 12, 30}
	ch1, ch2 := make(chan int), make(chan int)

	go Sum(slice[:len(slice) / 2], ch1)
	go Sum(slice[len(slice) / 2:], ch2)
	sum1, sum2 := <-ch1, <-ch2
	fmt.Println(sum1, sum2, sum1 + sum2)
}

2.2、信道/限制了大小的信道


设置大小的信道 一旦信道的空间被塞满了 一旦继续塞了之后则直接会被阻塞

创建出信道的格式是make(chan type, space int)


例如下面 所有的协程则将休眠

package main

import "fmt"

func main() {
	ch := make(chan int, 2)
	ch <- 1
	ch <- 2
	ch <- 3
	fmt.Println(<-ch)
	fmt.Println(<-ch)
}

在这里插入图片描述


2.3、信道/range close信道


rangeclose信道

close信道的时候 如果对方不听的进入range状态 则可以直接断开
range则是一直获取


下面是简单的例子 就用示例代码吧

package main

import (
	"fmt"
)

func fibonacci(n int, c chan int) {
	x, y := 0, 1
	for i := 0; i < n; i++ {
		c <- x
		x, y = y, x+y
	}
	close(c)
}

func main() {
	c := make(chan int, 10)
	go fibonacci(cap(c), c)
	for i := range c {
		fmt.Println(i)
	}
}

运行效果
在这里插入图片描述


3.1、Select语句


select语句类似于IO多路复用了 只不过在这里和IO多路复用原理感觉是差不多的 但不多揣测
下面用示例代码当例子


package main

import "fmt"

func fibonacci(c, quit chan int) {
	x, y := 0, 1
	for {
		select {
		case c <- x:
			x, y = y, x+y
		case <-quit:
			fmt.Println("quit")
			return
		}
	}
}

func main() {
	c := make(chan int)
	quit := make(chan int)
	go func() {
		for i := 0; i < 10; i++ {
			fmt.Println(<-c)
		}
		quit <- 0
	}()
	fibonacci(c, quit)
}


运行效果
在这里插入图片描述


剩下的就是并发了 这个就交给项目中实际操作来熟悉了
今天主要花时间去填写资料了 剩下的就不说了

go的新手村先走在这里吧

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

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

相关文章

申报高新技术企业需要哪些条件?

高新技术企业是在国家重点支持的高新技术领域中持续进行科研开发和技术成果转化&#xff0c;形成企业核心自主知识产权&#xff0c;并以此为基础开展生产经营活动的企业。成为高新技术企业以后会减免40%的所得税。 申报高新技术企业需要哪些条件&#xff1f; 第一点&#xff…

回收站不见了怎么恢复?一招把回收站的图标找回来!

有时我们会有这样的烦恼&#xff0c;明明回收站里面的东西还没被删除或者是还在回收站里面&#xff0c;但是回收站的图标就是看不到了。其实&#xff0c;这正是我们所说的电脑回收站不显示图标导致。因为我们关闭回收站位置以后&#xff0c;电脑系统都会自动把回收站置为“已删…

TPM零知识学习四 —— tpm2-tss源码安装

tpm2-tss包的的安装方法参考&#xff1a; tpm2-tss/INSTALL.md at master tpm2-software/tpm2-tss GitHub 1. 源码下载 $ git clone https://github.com/tpm2-software/tpm2-tss.git 下载完成后&#xff0c;源码内容如下所示&#xff1a; $ ls afl-fuzzing CHANGELOG.m…

基于ssm的小区物业管理系统

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

mac下安装nodejs跟vscode

1.打开官网 Node.js 2.点击下载 3.下载完成&#xff0c;根据提示下一步安装&#xff0c;安装完成后&#xff0c;在vscode中新建一个js文件&#xff0c;执行node test.js

[附源码]计算机毕业设计ssm新能源电动汽车充电桩服务APPSpringboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

opencv c++ 图像噪声及去噪

1、噪声类型及生成 1.1、类型 高斯噪声、椒盐噪声、泊松噪声、乘性噪声&#xff0c;等。 具体解释参考&#xff1a;(31条消息) 图像噪声简介_yeler082的博客-CSDN博客_图像噪声 高斯噪声 泊松噪声 乘性噪声 …

AWS SAP-C02 考试指南

Hello大家好&#xff0c;欢迎来到AWS解决方案架构师professional中文视频培训课程&#xff0c;我是讲师沉默恶魔。 本课时的内容是SAP-C02考试指南&#xff0c;我将介绍有关SAP-C02考试的详细信息。 SAP-C02是解决方案架构师专业级认证的最新版本的考试&#xff0c;目前也只能…

空域图像增强-图像滤波处理

3.图像滤波处理。自选一张图片&#xff0c;完成以下图像处理&#xff1a;①给图像分别添加随机噪声和椒盐噪声&#xff1b;②采用不同的平滑滤波模板进行滤波对比&#xff08;不同模板、不同尺寸&#xff09;&#xff1b;③采用中值滤波对图像进行滤波对比&#xff1b;④对添加…

GEE开发之Modis_NPP数据分析和获取

GEE开发之Modis_NPP数据分析和获取1.NPP2.MOD系列和MYD系列区别3.MOD17A3H_v006(500m/1年)4.MOD17A3HGF_v006(500m/1年)5.MOD17A3HGF_v061(500m/1年)6.MYD17A3H_v006(500m/1年)6.1 MYD17A3H下的指数6.2 遥感影像查看7.MYD17A3HGF_v061(500m/1年)8.MYD17A3HGF_v006(500m/1年)9.N…

行业应用之无限可能,就在亚马逊云科技re:Invent

在2022亚马逊云科技re:Invent全球大会Adam Selipsky“如何借助云的力量&#xff0c;在未知领域抓住机遇并茁壮成长”的主题演讲中&#xff0c;除了阐述主要的产品升级以外&#xff0c;亚马逊云科技还致力于打造面向特定行业或者特定应用场景的解决方案&#xff0c;以帮助客户快…

【Mongoose应用和文件上传】一.Express框架访问MongDB数据库;二.node实现文件上传

目录 一.Express框架访问MongDB数据库 1.目的&#xff1a; &#xff08;1&#xff09;mongoose模块的使用 &#xff08;2&#xff09;学会代码的封装&#xff1a;dao层、service层、接口层 &#xff08;3&#xff09;MVC设计思想&#xff1a;M&#xff08;Model&#xff0…

5.RabbitMQ高级特性

5.RabbitMQ高级特性 为什么不是RabbitMQ的事务&#xff1f; 这是从官网直接翻译过来的&#xff1a;网络可能以不太明显的方式出现故障&#xff0c;而且检测某些故障需要时间。因此&#xff0c;向套接字编写协议帧或一组帧(例如发布的消息)的客户端不能假定消息已经到达服务器…

【库存控制】基于蜜蜂算法优化库存控制附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

如何将dwg文件转成kml文件

第一步&#xff1a; 在CAD中将DWG另存为 DXF&#xff0c;如下&#xff1a; 注意&#xff1a;&#xff08;中文乱码&#xff09;为了打开的中文不出现乱码&#xff0c;保存DXF文件请选择如下的选项 第二步&#xff1a; 下载安装Bigemap GIS Office download.bigemap.com/bmset…

12.01 M4-UART-IT实验

1.使用CORTEX-M4核&#xff0c;实验中断实验和串口实验结合--->上传到CSDN 按键触发时&#xff0c;LED灯状态取反&#xff0c;并且在串口工具打印一句话 KEY1按键按下&#xff0c;LED1状态取反&#xff0c;串口工具打印key1 down!!!! 主要代码gpio.c void HAL_GPI…

C++ 语言学习 day14 复习 (6)

1.stack / queue(栈&#xff0c;队列) stack 构造函数 stack<int> v; 入栈 v.push(i); 出栈 v.pop(); 是否为空 v.empty() queue 构造函数 queue<int> v; 入队 v.push(i); 出队 v.…

下载axios时出现很多npm ERR错误:npm ERR! code ERESOLVEnpm ERR! ERESOLVE could not resolve

出现的下载错误&#xff1a; npm ERR! code ERESOLVE npm ERR! ERESOLVE could not resolvenpm ERR! npm ERR! while resolving: vue/eslint-config-standard6.1.0npm ERR! Found: eslint-plugin-vue8.7.1 npm ERR! node_modules/eslint-plugin-vue npm ERR!dev eslint-plugin-…

毕业设计案例:Python实现疫苗接种数据库管理系统

一、序言 那一年过年前&#xff0c;疫情开始爆发&#xff0c;对全国人民的生活和工作造成了严重的影响。但凭借着国家强盛的实力&#xff0c;新冠疫苗也很快的被技术人员研发出来&#xff0c;人们通过接种新冠疫苗来抵御新冠病毒的危害。本次通过接种新冠疫苗的这个数据统计&a…

(一)正则表达式——基础概念

&#xff08;一&#xff09;正则表达式——基础概念 概括 用来处理字符串的规则。除了对象、函数&#xff0c;我们操作得最多的就是字符串 正则的两大作用&#xff1a; 验证是否匹配把匹配到的内容捕获到量词元字符*特殊元字符点. &#xff1a;除了\r \n以外的字符 普通元字符h…