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)

大家都在看

  • websocket:二.Golang实现Websocket消息通知

    我们在设计产品的时候通常都会遇到消息通知的时候,比如用户下单支付成功,比如用户有站内信来可以实时通知。而http是单向的,客户端请求,服务端返回,这次请求就已经结束。而websoc…

    Go语言 2023年5月25日
    068
  • 基于知名微服务框架go-micro开发gRPC应用程序

    go-micro是golang的一个微服务框架。 go-micro各个版本之间的兼容性问题一直被诟病,前几年go-micro更是分化出了两个分支: 一个延续了go-micro,只不…

    Go语言 2023年5月25日
    0140
  • Go select 死锁引发的思考

    上文总结 package main import ( "fmt" ) func main() { ch := make(chan int) go func() …

    Go语言 2023年5月25日
    042
  • Go基础知识梳理(三)

    Go基础知识梳理(三) 结构 type Person struct { name string sex int } func main() { //&#x63A8;&amp…

    Go语言 2023年5月25日
    077
  • Go基础知识梳理(四)

    Go基础知识梳理(四) GO的哲学是”不要通过共享内存来通信,而是通过通信来共享内存”,通道是GO通过通信来共享内存的载体。 rumtime包常用方法 ru…

    Go语言 2023年5月25日
    049
  • 字符集与编码

    一个比特(bit)可以是0,或者是1,8个比特(bit),组成一个字节(byte)。全为0时代表数字0,全为1时代表数字255。 一个字节可以表示256个数字,两个字节可以表示65…

    Go语言 2023年5月25日
    057
  • 第十五章:指针类型

    本篇翻译自《Practical Go Lessons》 Chapter 15: Pointer type 1 你将在本章将学到什么? 什么是指针? 什么时指针类型? 如何去创建并使…

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

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

    Go语言 2023年5月29日
    061
  • Go语言之高级篇beego框架之controller调用model

    一、controller调用model 开发规范,就该把对数据库的操作写在model文件夹中。 示例: views/main.go routers/router.go models…

    Go语言 2023年5月29日
    067
  • go语言四 channel和gorotime

    goroutine go中使用Goroutine来实现并发concurrently。 Goroutine是Go语言特有的名词。区别于进程Process,线程Thread,协程Cor…

    Go语言 2023年5月29日
    061
  • GO的URL合法性检查

    原文连接:https://www.zhoubotong.site/post/67.html Go 标准库的net/url包提供的两个函可以直接检查URL合法性,不需要手动去正则匹配…

    Go语言 2023年5月25日
    085
  • 一次Kafka内存泄露排查经过

    一、现象 服务部署后内存总体呈上升趋势 二、排查过程 通过go tool pprof收集了三天内存数据 2月11号数据: 2月14号数据: 2月15号数据: 我们使用sarama客…

    Go语言 2023年5月25日
    064
  • Go语言之高级篇beego框架之config、httplib、context

    一、httplib 1、配置文件解析 这是一个用来解析文件的库,它的设计思路来自于 database/sql,目前支持解析的文件格式有 ini、json、xml、yaml,可以通过…

    Go语言 2023年5月29日
    037
  • Go切片全解析

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

    Go语言 2023年5月25日
    083
  • 【Go实战基础】创建并完成第一个可执行的 go 程序

    实战需求:创建并完成第一个可执行的 go 程序。 项目目录:go-001 具体实战步骤如下: 一、进入工程目录 二、 创建 g001.go 文件 三、编译和运行 1、当前目录生成模…

    Go语言 2023年5月25日
    061
  • go语言 函数return值的几种情况

    分三种情况 (以下 “指定返回值”这句话, 仅指return后面直接跟着的返回值) 退出执行,不指定返回值 *(1) 函数没有返回值 package mai…

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