农村四月闲人少,勤学苦攻把名扬。这篇文章主要讲述从零开发区块链应用--golang协程使用相关的知识,希望能为你提供帮助。
文章目录
- ??一、什么是并发??
- ??1.1 并发定义??
- ??1.2 并发的好处??
- ??二、什么是协程??
- ??2.1 协程定义??
- ??2.2 协程的优点??
- ??三、golang协程实践??
1.2 并发的好处 二、什么是协程 2.1 协程定义协程是一种用户态的轻量级线程,又称微线程。
在go程序中,go语言在运行时会自动的创建和销毁系统级的线程。系统级线程指的是操作系统提供的线程。
那么对应的用户级线程,指的是架设在系统级线程之上的,用户级线程的创建、销毁、调度、状态变更,都需要靠我们的程序自己去实现和处理。
与线程相比,创建gotoutine的成本很小,他就是一段代码,一个函数入口
2.2 协程的优点协程的创建和销毁不需要通过操作系统去做,因此,是没有线程切换的开销,所以速度会很快,可以提高任务并发性
三、golang协程实践协程 类似于一个线程,但是由 Go 而不是操作系统预定。在 协程 中运行的代码可以与其他代码同时运行。我们来看一个
package main
import (
"fmt"
"time"
)
func main()
fmt.Println("start")
go process()
time.Sleep(time.Millisecond * 10) // this is bad, dont do this!
fmt.Println("done")
func process()
fmt.Println("processing")
这里有一些有趣的事情, 但最重要的是我们如何开始一个 协程 。 我们只需使用 go 关键字,然后使用我们想要执行的函数。如果我们只想运行一部分代码, 如上所述, 我们可以使用匿名函数。需要注意的是,匿名函数不只是可以在 协程 中使用,其他地方也可以。
go func()
fmt.Println("processing")
()
协程 易于创建且开销很小。最终多个 协程 将会在同一个底层的操作系统线程上运行。这通常也称为 M:N 线程模型,因为我们有 M 个应用线程( 协程 )运行在 N 个操作系统线程上。结果就是,一个 协程 的开销和系统线程比起来相对很低(几 KB)。在现代的硬件上,有可能拥有数百万个 协程 。
此外,这里还隐藏了映射和调度的复杂性。我们只需要说 这段代码需要同时并发执行 然后让 Go 自己去实现它。
如果我们回到我们的例子中,你将会注意到我们使用 Sleep 让程序等了几毫秒。这是因为主进程在退出前 协程 才会有机会去执行(主进程在退出前不会等待全部 协程 执行完毕)。要解决这个问题,我们需要协调我们的代码。
【从零开发区块链应用--golang协程使用】
推荐阅读
- Fedora 上如何安装 gitea
- Hunter狩猎者夹子机器人系统开发方案解析
- 从零开发区块链应用--结构体初识
- Ansys/HFSS Antenna Design Kit 2.15软件分享以及常见问题
- 通信圈周盘点:2022年思科创新峰会成功举行;华为提出
- android 水波纹效果实现
- APP 资讯资源
- Android新增的注解
- webAPP踩坑记录