go runtime.Gosched()의 역할 분석
1928 단어 Runtime
코드 보기:
package main
import (
"fmt"
"runtime"
)
func say(s string) {
for i := 0; i < 2; i++ {
runtime.Gosched()
fmt.Println(s)
}
}
func main() {
go say("world")
say("hello")
}
결과 출력:
hello
world
hello
결과 참고:
1、먼저 Hello를 출력하고 월드를 출력합니다.
2. Hello가 2개를 출력했고 World가 1개를 출력했다(2번째 Hello가 출력이 끝나면 메인 라인이 종료되고 두 번째 World는 기회가 없다)
코드의runtime를.Gosched()가 주석을 달았습니다. 결과는 다음과 같습니다.
hello
hello
say("hello")가 시간을 차지했기 때문에 실행이 끝나고 라인도 끝나면say("world")는 기회가 없습니다.
여기서 동시에 알 수 있듯이 고의 고루틴스는 동시에 운행하는 것이 아니다.사실 코드에서 통과되지 않았다면
runtime.GOMAXPROCS(n) 여기서 n은 정수입니다.
다중 핵을 사용하도록 지정하면 goroutins는 모두 한 라인에 있으며, 그들 사이에는 끊임없이 타임 슬라이드를 내어 돌아가며 운행하는 것과 비슷한 동시 운행 효과를 얻는다.
한마디를 더 배워야 한다.
하나의 Goroutine가 막히면 Go는 자동으로 이 Goroutine와 같은 시스템 라인에 있는 다른 Goroutines를 다른 시스템 라인으로 옮겨서 이 Goroutines가 막히지 않도록 합니다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
httpRunTime web.config 속성ASP.NET는 어플리케이션에 대한 최대 요청 수를 정렬합니다.요청을 처리할 충분한 자유 루트가 없을 때, 요청을 줄을 서게 됩니다.대기열이 이 설정에서 지정한 제한을 초과하면'503 - 서버가 너무 바쁩니다'오류 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.