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。

相关推荐
重生之后端学习1 小时前
438. 找到字符串中所有字母异位词[中等]✅
开发语言·数据结构·算法·leetcode·职场和发展
晴天161 小时前
Gradio 与 Streamlit:Python 快速构建 Web 应用的双子星-Day28
开发语言·前端·python
nxb5561 小时前
云原生:控制器
java·开发语言·云原生
mldong1 小时前
一条命令,十分钟:jeeflow 工作流应用的六语言一键部署
前端·后端·架构
Shawn_Shawn1 小时前
本体论的基本核心概念
后端·llm·领域驱动设计
whcyhhh1 小时前
头歌实践教学平台:数据科学与大数据技术导论(十)
大数据·开发语言·python
Data_Journal9 小时前
用于网页抓取的 Node-unblocker
大数据·开发语言·数据库·python·scrapy
豆角焖肉9 小时前
SSM 聚合项目搭建:多 Maven 模块项目
开发语言·python·pycharm
Frank_refuel9 小时前
【C++八股】面向对象
开发语言·c++