>  기사  >  Go 언어 수준에서 동시성은 무엇을 의미합니까?

Go 언어 수준에서 동시성은 무엇을 의미합니까?

DDD
DDD원래의
2023-06-12 15:11:49854검색

Go 언어 수준의 동시성은 Go 언어를 사용하여 동일한 기간 내에 여러 작업을 수행하는 것을 의미합니다. Go 루틴은 고루틴을 통해 달성되며 수천 개의 고루틴에 속합니다. 필요에 따라 동시에 작업할 수 있습니다.

Go 언어 수준에서 동시성은 무엇을 의미합니까?

이 기사의 운영 환경: Windows 10 시스템, go1.20 버전, dell g3 컴퓨터.

Go 언어 수준의 동시성이란 Go 언어를 사용하여 동시에 여러 작업을 수행하는 것을 의미합니다.

동시성은 프로그래밍에서 매우 중요한 개념입니다. Go 언어는 본질적으로 언어 수준에서 동시성을 지원합니다.

동시성 및 병렬성

동시성: 동일한 시간 내에 여러 작업을 수행합니다(예: WeChat을 사용하여 두 명의 여자친구와 채팅).

병렬: 동시에 여러 작업을 수행합니다(예: 귀하와 귀하의 친구가 모두 WeChat에서 여자 친구와 채팅하고 있습니다).

Go 언어의 동시성은 고루틴을 통해 구현됩니다. 고루틴은 스레드와 유사합니다. (스레드와 프로세스는 운영체제에서 파생된 개념입니다. 프로세스는 대규모 작업장에 해당하고, CPU는 공장에 해당합니다. 작업장이 많이 있습니다. 공장에서는 프로세스가 공장을 제어합니다. 스레드는 프로세스에 따라 작업자 및 다양한 리소스로 구분됩니다. 필요에 따라 스레드가 수천 개 이상 생성됩니다. 고루틴은 동시에 작동합니다. 고루틴은 Go 언어의 런타임에 의해 예약되고 두 번째 스레드는 운영 체제에 의해 예약됩니다.

Go 언어는 여러 고루틴 간에 통신할 수 있는 채널도 제공합니다. 고루틴과 채널은 Go 언어가 CSP(공유 메모리를 통한 통신이 아닌 공유 메모리를 통한 통신 촉진) 동시성 모드를 준수하기 위한 중요한 구현 기반입니다.

확장:

goroutine

은 스레드와 유사하게 구현됩니다. 언어 수준에서, 언어 수준에서 운영 체제 스레드에서 실행됩니다.

고루틴은 함수에 대응해야 하며, 동일한 함수를 실행하기 위해 여러 개의 고루틴을 생성할 수 있습니다.

go에서 고루틴을 사용하는 것은 매우 편리합니다. 함수 호출 시 앞에 go 키워드를 추가하여 함수에 대한 고루틴을 만들 수 있습니다.

단일 고루틴 시작:

package main
import (
"fmt"
"sync"
)
var wg sync.WaitGroup //WaitGroup等待方法
// goroutine demo
func hello(i int){
fmt.Println("Hello hello",i)
wg.Done() //此方法如果运行 ,通知wg把计数器 -1
}
func main() {  // 开启一个主goroutine去执行mian函数
wg.Add(10000)//(计数器)只有一个小弟为1,等待wg.Done()后-1,为0时停止等待
for i:=0; i<10000;i++{
//wg.Add(1) 可以给定10000个goroutine 也可以,每次循环+1
go hello(i) // 开启了一个独立的 goroutine去执行hello这个函数
}
fmt.Println("Hello main")
// 让我们的主goroutine 等待 goroutine 小弟 执行
// 如果不等待,独立的goroutine小弟,可能小弟这个goroutine还没有运行
//time.Sleep(time.Second) 第二种等待
wg.Wait()//等待所有小弟干完活
}

고루틴과 스레드의 차이점

OS 스레드(운영 체제 스레드)는 각각 고정된 스택 메모리(보통 2MB)를 가지며, 고루틴의 스택에는 고정된 스택 메모리만 있습니다. 수명 주기가 시작될 때 매우 작은 스택(일반적으로 2KB) 고루틴의 스택은 고정되어 있지 않습니다. 필요에 따라 그루틴의 스택 크기 제한은 1GB에 도달할 수 있지만 드문 경우에는 1GB에 도달합니다. 따라서 Go언어에서는 한번에 약 10만개 정도의 그루틴을 생성하는 것이 가능하다.

위 내용은 Go 언어 수준에서 동시성은 무엇을 의미합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.