go runtime.Gosched()의 역할 분석

1928 단어 Runtime
untime.Gosched()는 CPU 타임 슬라이스를 내보냅니다.이것은 마치 릴레이를 뛰는 것과 같다. A가 뛰다가 코드runtime에 부딪혔다.Gosched()는 바통을 B에게 건네주었고, A는 쉬었고, B는 계속 뛰었다.
코드 보기:
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가 막히지 않도록 합니다

좋은 웹페이지 즐겨찾기