nas versões GO antes de 1.5, um pedaço de código envolvendo RunTime.gosched () foi observado para afetar a saída de um programa:
func say(s string) { for i := 0; ihello mundo olá mundo olá mundo olá mundo Hello
hello world hello world hello world hello world hellohello olá olá olá Olá
hello hello hello hello hellonas versões GO antes de 1.5, RunTime.gosched () produziu explicitamente o controle para outros goroutines quando chamado. Enquanto os programas GO são executados em um único thread do sistema operacional por padrão, RunTime.gosched () permitiu que o agendador alterasse a execução entre Goroutines. Assim, no exemplo de código acima, a saída "mundo" apareceu apenas quando a execução do tempo.Gosched () foi chamada, pois permitia que o agendador mudasse para a goroutine executando a declaração de impressão "mundial". Esse go pode criar vários threads do sistema operacional para executar goroutines. No entanto, diferentemente dos sistemas de multitarefa preventivos, as goroutinas ainda devem produzir explicitamente o controle para permitir que outras goroutinas sejam executadas. Isso ocorre porque o GO usa multitarefa cooperativa, onde as goroutinas entregam voluntariamente o controle ao agendador. Isso pode levar a padrões de saída imprevisíveis, como visto no exemplo acima, quando o gomaxprocs foi definido como 2.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3