首页 编程 Go 查看内容

Golang创建一百万个轻量级线程并同时执行 - 完美代码

2021-12-28 12:41 1694 0

摘要: 进程、进程内的线程和进程内协程(也叫轻量级线程)是一个抽象的概念。与传统的系统级线程和进程相比,协程的最大优势在于其“轻量级”,可以轻松创建百万个甚至千万个而不会导致系统资源耗尽;而线程和进程通常最多 ...
关键词: 线程 轻量级 进程 time 同时 创建 建一 系统 start Sleep

进程、进程内的线程和进程内协程(也叫轻量级线程)是一个抽象的概念。

与传统的系统级线程和进程相比,协程的最大优势在于其“轻量级”,可以轻松创建百万个甚至千万个而不会导致系统资源耗尽;而线程和进程通常最多也不能超过一万个。

Go语言在语言级别支持轻量级线程,叫 goroutine,执行时只需要4-5k的内存,比线程更易用,更高效轻便,调度开销更小,可同时运行上千万个并发。

Go语言中的轻量级线程的切换管理不依赖于系统的线程和进程,也不依赖于CPU的核心数量。

Go实现轻量级线程非常简单,下面将展示如何创建一百万个轻量级线程:

package main

import (
	"fmt"
	"runtime"
	"time"
)

var start = make(chan bool)

func main() {
	runtime.GOMAXPROCS(4) //CPU核心数
	for i := 0; i < 1000000; i++ {
		go sayhello(i)
	}
	fmt.Println("一百万个协程创建完毕,60秒后开始同时运行!")
	time.Sleep(time.Second*60)
	close(start)
	time.Sleep(time.Second*60)//主线程Sleep 60秒,确保所有任务全部执行完成。
}

func sayhello(i int) {
	<- start
	fmt.Println("hello",i)
}
Go

上述代码将创建 100万个轻量级 goroutine ,并同时执行,确保有足够的可用内存哦。

本文出处: https://www.perfcode.com/p/1112.html
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部