Go语言的goroutine

Go世界里,每一个并发执行的活动成为goroutine。

通过创建goroutine,就可以实现并行运算,十分方便。

如果有函数f(),那么:

f():调用函数f(),并且等待它返回

go f():新建一个调用f()的goroutine,不等待

Go语言程序:

// fib project main.go
package main

import (
    "fmt"
    "time"
)

func main() {
    go spinner(1000 * time.Millisecond)

    const n = 46
    fibN := fib(n) // slow
    fmt.Printf("\rFibonacci(%d) = %d\n", n, fibN)
}

func spinner(delay time.Duration) {
    for {
        for i, r := range "abcd" {
            fmt.Printf("%d: %c\n", i, r)
            time.Sleep(delay)
        }
    }
}

func fib(x int64) int64 {
    if x < 2 {
        return x
    }
    return fib(x-2) + fib(x-1)
}

运行结果:

0: a
1: b
2: c
3: d
0: a
1: b
2: c
3: d
0: a
1: b
2: c
3: d
0: a
1: b
2: c
3: d
0: a
1: b
2: c
3: d
0: a
1: b
2: c
3: d
0: a

Fibonacci(46) = 1836311903

程序说明:

1.函数spinner()是个死循环,循环输出字符串中的一个字符,然后进入睡眠状态1秒钟

2.函数fib()是递归算法的计算程序,非常慢,尤其是调查用时代入的参数是46,实际运行实际大概是25秒

3.函数main()结束时,会强制终结所有的goroutine,然后退出程序

Original: https://www.cnblogs.com/tigerisland/p/7563552.html
Author: 海岛Blog
Title: Go语言的goroutine

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/535750/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 许式伟:Go+ 演进之路

    7 月 10 日,一年一度的 ECUG Con 2022 在线上圆满举行。许式伟作为七牛云 CEO、ECUG 社区发起人、Go+ 语言发明人,为大家来带了《Go+ 演进之路》的主题…

    Go语言 2023年5月25日
    077
  • sqlx操作MySQL实战及其ORM原理

    sqlx是Golang中的一个知名三方库,其为Go标准库database/sql提供了一组扩展支持。使用它可以方便的在数据行与Golang的结构体、映射和切片之间进行转换,从这个角…

    Go语言 2023年5月25日
    061
  • Go语言实现线程安全访问队列

    这个例子用Go语言的包”container/list”实现一个线程安全访问的队列。其中不少细节耐人寻味,做出它则是花费了不少精力,找不到样例啊! Go语言的…

    Go语言 2023年5月29日
    042
  • Go语言之高级篇Beego框架之爬虫项目实战

    一、爬虫项目 1、爬虫基础 a、网页上面会有相同的数据 b、去重处理 布隆过滤器哈希存储 c、标签匹配: 正则表达式beautiful soup或lxml这种标签提取库 d、动态内…

    Go语言 2023年5月29日
    050
  • 自己实现一个Controller——标准型

    标准Controller 上一篇通过一个简单的例子,编写了一个controller-manager,以及一个极简单的controller。从而对controller的开发有个最基本…

    Go语言 2023年5月25日
    077
  • go-micro开发RPC服务的方法及其运行原理

    go-micro是一个知名的golang微服务框架,最新版本是v4,这篇文章将介绍go-micro v4开发RPC服务的方法及其运作原理。 基本概念 go-micro有几个重要的概…

    Go语言 2023年5月25日
    048
  • Go切片全解析

    目录结构:数组切片 底层结构 创建 普通声明 make方式 截取 边界问题 追加 拓展表达式 扩容机制 切片传递的坑 切片的拷贝 浅拷贝 深拷贝 var n [4]int fmt….

    Go语言 2023年5月25日
    068
  • go-containerregistry 实战篇之容器镜像下载

    go-containerregistry 实战篇之容器镜像下载 一、库介绍 go-containerregistry 是 google 公司开源的用于处理容器镜像的golang客户…

    Go语言 2023年5月25日
    057
  • Go微服务框架go-kratos学习05:分布式链路追踪 OpenTelemetry 使用

    一、分布式链路追踪发展简介 1.1 分布式链路追踪介绍 关于分布式链路追踪的介绍,可以查看我前面的文章 微服务架构学习与思考(09):分布式链路追踪系统-dapper论文学习(ht…

    Go语言 2023年5月25日
    042
  • 《Go语言圣经》 读书笔记与个人思考 ① 第一章、包括源码分析

    《The Go Programming Language》 知识点记载,学习笔记、章节练习与个人思考。前言 · Go语言圣经 (itsfun.top) 标题后标记了小丑符号的表示还…

    Go语言 2023年5月25日
    077
  • Context包源码解析(附面经)

    Context就相当于一个树状结构最后请回答一下这个问题:context包中的方法是线程安全吗? Context包中主要有一个接口和三个结构体 type Context inter…

    Go语言 2023年5月25日
    056
  • 如何在 Go 中将 []byte 转换为 io.Reader?

    原文链接: 如何在 Go 中将 []byte 转换为 io.Reader? 在 stackoverflow 上看到一个问题,题主进行了一个网络请求,接口返回的是 []byte。如果…

    Go语言 2023年5月25日
    065
  • 在浏览器上开发GO和Vue!(基于code-server)

    在浏览器上开发GO和Vue!(基于code-server) 曾几何时,开发者们都被安装编程环境苦恼,尽管现在很多语言的开发环境已经不难装了,但是如果我们能有一个运行在云端的编译器,…

    Go语言 2023年5月25日
    063
  • Golang笔记

    本文主要为go的学习过程笔记。 一、基本介绍 1、开发环境安装-windows安装 打开Golang官网,选择对应版本,进行安装。 2、环境变量配置 1)步骤 (1)首先在环境变量…

    Go语言 2023年5月25日
    047
  • Golang实现set

    Golang语言本身未实现set,但是实现了map golang的map是一种无序的键值对的集合,其中键是唯一的 而set是键的不重复的集合,因此可以用map来实现set 由于ma…

    Go语言 2023年5月25日
    049
  • Maglev : A Fast and Reliable Software Network Load Balancer (using Consistent Hashing)

    前言(为什么想读这一篇论文) 这一篇论文吸引我注意的原因是,Consistent Hashing ;本来的特性就是作为分布式缓存之用。谷歌将他们的负载均衡器(代号:Maglev)发…

    Go语言 2023年5月25日
    049
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球