Go——小白学习之并发和并行

简介: 对于新手小白来说其实有点难理解并发和并行的定义,也让男票讲了很多遍才懂,才发现以后的路程任重道远,以下为并发的定义,建议不懂的时候画图,这个对于小白来说不能死抠定义,让有经验的人来解释会理解的更快go里用go协程和信道解决并发问题,其实...

对于新手小白来说其实有点难理解并发和并行的定义,也让男票讲了很多遍才懂,才发现以后的路程任重道远,以下为并发的定义,建议不懂的时候画图,这个对于小白来说不能死抠定义,让有经验的人来解释会理解的更快

img_fc8615017503124f18427899b54e42bf.png

go里用go协程和信道解决并发问题,其实我还是有一个地方不懂,就是协程和线程的区别在哪里,从某位博客里看到如是说:一个线程可以多个协程,一个进程也可以单独拥有多个协程,线程进程都是同步机制,而协程则是异步,协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次的调用的状态

例题


img_d7c2ecdfe52f2cb926d5bde79f65393c.png
因为for是个死循环,如果在go newTask后面读取信道的话,会一直执行 newTask  函数,如果在main函数最后读取信道的话,会按照系统自己的意愿可能执行 newTask,也可能执行main函数,这个比较好理解信道和协程


例题:求出一个数的平方和与立方和(用协程信道方式)


img_4aa3a5a7e99c80bae1a951a7531a99e9.png
目录
相关文章
|
1月前
|
程序员 Go 云计算
2023年学习Go语言是否值得?探索Go语言的魅力
2023年学习Go语言是否值得?探索Go语言的魅力
|
1月前
|
Go
Go 语言为什么不支持并发读写 map?
Go 语言为什么不支持并发读写 map?
|
24天前
|
缓存 NoSQL Go
通过 SingleFlight 模式学习 Go 并发编程
通过 SingleFlight 模式学习 Go 并发编程
|
10天前
|
编译器 Go
go语言学习记录(关于一些奇怪的疑问)有别于其他编程语言
本文探讨了Go语言中的常量概念,特别是特殊常量iota的使用方法及其自动递增特性。同时,文中还提到了在声明常量时,后续常量可沿用前一个值的特点,以及在遍历map时可能遇到的非顺序打印问题。
|
1月前
|
JSON 中间件 Go
go语言后端开发学习(四) —— 在go项目中使用Zap日志库
本文详细介绍了如何在Go项目中集成并配置Zap日志库。首先通过`go get -u go.uber.org/zap`命令安装Zap,接着展示了`Logger`与`Sugared Logger`两种日志记录器的基本用法。随后深入探讨了Zap的高级配置,包括如何将日志输出至文件、调整时间格式、记录调用者信息以及日志分割等。最后,文章演示了如何在gin框架中集成Zap,通过自定义中间件实现了日志记录和异常恢复功能。通过这些步骤,读者可以掌握Zap在实际项目中的应用与定制方法
go语言后端开发学习(四) —— 在go项目中使用Zap日志库
|
1天前
|
Shell Go API
Go语言grequests库并发请求的实战案例
Go语言grequests库并发请求的实战案例
|
1月前
|
算法 NoSQL 中间件
go语言后端开发学习(六) ——基于雪花算法生成用户ID
本文介绍了分布式ID生成中的Snowflake(雪花)算法。为解决用户ID安全性与唯一性问题,Snowflake算法生成的ID具备全局唯一性、递增性、高可用性和高性能性等特点。64位ID由符号位(固定为0)、41位时间戳、10位标识位(含数据中心与机器ID)及12位序列号组成。面对ID重复风险,可通过预分配、动态或统一分配标识位解决。Go语言实现示例展示了如何使用第三方包`sonyflake`生成ID,确保不同节点产生的ID始终唯一。
go语言后端开发学习(六) ——基于雪花算法生成用户ID
|
1月前
|
JSON 缓存 监控
go语言后端开发学习(五)——如何在项目中使用Viper来配置环境
Viper 是一个强大的 Go 语言配置管理库,适用于各类应用,包括 Twelve-Factor Apps。相比仅支持 `.ini` 格式的 `go-ini`,Viper 支持更多配置格式如 JSON、TOML、YAML
go语言后端开发学习(五)——如何在项目中使用Viper来配置环境
|
18天前
|
Rust Linux Go
Rust/Go语言学习
Rust/Go语言学习
|
1月前
|
Go API
Go 利用上下文进行并发计算
Go 利用上下文进行并发计算