Golang创建一百万个轻量级线程并同时执行

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

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

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)
}

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

原创内容,如需转载,请注明出处;

本文地址: https://www.perfcode.com/p/1112.html

分类: 计算机技术
推荐阅读:
PySide6 QWidget更改窗口标题 PySide6.QtWidgets.QWidget类的成员函数setWindowTitle()用于为窗口更改标题;
Matlab如何设置默认工作目录? 要设置 MATLAB 的默认工作目录,可以按照以下步骤进行操作:
Python sum()函数 在 Python 中,sum() 函数用于对给定的可迭代对象进行求和操作。
在Linux终端右上角实时显示时间 在Linux系统下,可以通过一条命令在终端的右上角显示当前系统的时间:
Python callable()函数 在 Python 中,callable() 是一个内置函数,用于检查给定对象是否是可调用的。如果对象是可调用的,则返回 True,否则返回 False。
Python实现二分法检索(binary search) 二分法检索(binary search)又称折半检索,二分法检索的基本思想是设字典中的元素从小到大有序地存放在数组(array)中。