Go语言的简洁并发编程

进程是操作系统分配资源的基本单位,线程才是执行任务的最小执行单位。一个进程内可以有多个线程。而Go语言的并发模型则是使用了Coroutine协程。协程也是通过线程来执行的。Go语言调度算法会为每个线程提供一个Coroutine执行队列。当有一个Coroutine执行了一个系统调用并且阻塞时,该线程会被挂起,那该线程就没有办法继续去执行其他Coroutine了,此时Go语言的调度算法就将该线程的Coroutine队列转移到其他线程的队列当中。当该线程从阻塞恢复后,再从其他线程的Coroutine队列拿一些回来执行,使得各个线程的执行效率得到有效保证,这也是Go语言在并发方面这么厉害的原因。

它的简洁之处在于启动Coroutine的方式,只需要关键字go加函数调用,如:

go 复制代码
package main

import "fmt"
import "time"

func main() {

	fmt.Println("start")
	go func() { // 开协程
		fmt.Println("Corountine")
	}()
	time.Sleep(time.Second * 1)
	fmt.Println("end")
}

在Go语言中,程序一启动,main就是第一个Coroutine。

相关推荐
我的div丢了肿么办6 分钟前
进程和线程以及go语言中的协程
后端·go
清水白石0088 分钟前
Python 对象模型深度解析:从“一切皆对象”到 id、type、isinstance 底层机制与小整数缓存原理
开发语言·python·缓存
墨家句子9 分钟前
4G 显存老显卡怎么跑模型:llama.cpp 加 GGUF 配置
linux·后端
HLAIA光子10 分钟前
RAG Chunks 切分优化后成本骤降 86%
后端·性能优化·架构
燕落南枝13 分钟前
c语言 洛谷P1765手机题解
c语言·开发语言
Rosanci14 分钟前
Codex 下载与本地部署实战:从安装到运行全流程指南
开发语言·前端·算法·chatgpt·codex
后端LV16 分钟前
Caffeine 快到 1450 万 ops/s,为什么我还是不敢说数据一致
java·后端
zhangzeyuaaa19 分钟前
深入 Ruby:Block、Proc、Lambda 核心区别与最佳实践
开发语言·前端·ruby
蜗牛互联网22 分钟前
Java 17调用Embeddings API:余弦相似度与FAQ拒答阈值
java·开发语言·人工智能
郝学胜-神的一滴26 分钟前
AI 编程智能体 05:拆解智能体分级体系、类型与全行业落地场景
开发语言·人工智能·python·程序人生·pycharm