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

分类: 计算机技术
推荐阅读:
Requests详细教程 Requests 是一个功能强大、优雅而简单的 Python HTTP库;使用Requests发送网络请求整个过程将变得非常简单。
Rust实现冒泡排序算法(Bubble Sort) 本文将使用Rust语言实现冒泡排序算法;
C语言获取操作系统类型 在C语言中,获取操作系统类型的方法通常依赖于操作系统和编译器。以下是一种常见的方法,可以使用预定义的宏来获取操作系统类型:
TypeError: __format__ must return a str, not NoneType 在 Python 中,如__format__()方法必须返回一个字符串,否则将触发类似TypeError: __format__ must return a str, not NoneType的错误;
Python 获取网卡的MAC地址 获取网卡MAC地址可以使用Python标准库中的uuid模块;uuid模块提供了getnode()函数,用于获取机器的MAC地址。这个函数返回一个整数值,表示机器的48位MAC地址,其中高16位可能包含厂商信息。
Python使用莱布尼茨公式计算圆周率 可以通过莱布尼茨级数的求和来逼近圆周率;公式为:π/4 = 1 - 1/3 + 1/5 - 1/7 + 1/9 - ......(无限项)