LOGO

Golang 入门-2.并发


Goroutine(协程)

Goroutine(协程, 不严谨) 是一种户态线程, 多个Goroutine中,Go使用通道(channel)进行通信。

进程:拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调度。
线程:拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程亦由操作系统调度。
协程 :和线程一样共享堆,不共享栈,协程由程序员在协程的代码里显示调度。

生产消费模型

生产消费模型
package main

import (
	"fmt"
	"math/rand"
	"time"
)
// 数据生产者
func producer(header string, channel chan<- string) {
	// 无限循环, 不停地生产数据
	for {
		// 将随机数和字符串格式化为字符串发送给通道
		channel <- fmt.Sprintf("%s: %v", header, rand.Int31())
		// 等待1秒
		time.Sleep(time.Second)
	}
}
// 数据消费者
func customer(channel <-chan string) {
	// 不停地获取数据
	for {
		// 从通道中取出数据, 此处会阻塞直到信道中返回数据
		message := <-channel
		// 打印数据
		fmt.Println(message)
	}
}
func main() {
	// 创建一个字符串类型的通道
	channel := make(chan string)
	// 创建producer()函数的并发goroutine
	go producer("cat", channel)
	go producer("dog", channel)
	// 数据消费函数
	customer(channel)
}

文章作者: 鲁君树人
版权声明: 本篇文章采用 CC BY 4.0 版权协议『必须署名,可共享,可演绎』,转载请注明来源 幺蛾日记 !
评论
 上一篇
Golang 入门-1.语法 Golang 入门-1.语法
特性Go语言具有以下的特征: 自动垃圾回收 更丰富的内置类型 函数多返回值 错误处理 匿名函数和闭包 类型和接口 并发编程 反射 语言交互性 命令go build test.go # 生成可执行文件 test go run test.g
2021-10-18
下一篇 
系统方法论-0.系统 系统方法论-0.系统
洞察力,就是透视其中“要素”和“连接关系”的能力。任何复杂的系统,都构建于其固有的简单性。所有的系统抽象看来,除了“要素”,就是“要素”之间的四种“连接关系”:因果链、增强回路、调节回路,和滞后效应。“要素”在这4种连接关系的作用下,也会持
2021-10-12
  目录