Голангский паралелизм - PullRequest
       1

Голангский паралелизм

0 голосов
/ 22 октября 2018

Я недавно много читал о параллелизме и параллелизме в Go, и я не могу обернуть это вокруг.Когда я читал эту статью о параллелизме и параллелизме в Go , я сталкивался с этим утверждением:

Мы видим, что программы действительно работают параллельно.Обе программы запускаются немедленно, и вы можете увидеть, как они борются за стандарт, чтобы показать свои результаты.

Это утверждение относится к этой программе:

package main

import (
    "fmt"
    "runtime"
    "sync"
)

func main() {
    runtime.GOMAXPROCS(2)

    var wg sync.WaitGroup
    wg.Add(2)

    fmt.Println("Starting Go Routines")
    go func() {
        defer wg.Done()

        for char := ‘a’; char < ‘a’+26; char++ {
            fmt.Printf("%c ", char)
        }
    }()

    go func() {
        defer wg.Done()

        for number := 1; number < 27; number++ {
            fmt.Printf("%d ", number)
        }
    }()

    fmt.Println("Waiting To Finish")
    wg.Wait()

    fmt.Println("\nTerminating Program")
}

Какие выводы:

Starting Go Routines
Waiting To Finish
a b 1 2 3 4 c d e f 5 g h 6 i 7 j 8 k 9 10 11 12 l m n o p q 13 r s 14
t 15 u v 16 w 17 x y 18 z 19 20 21 22 23 24 25 26
Terminating Program

Значит ли это, что во время выполнения 2 цикла выполняются из одновременного выполнения подпрограмм (так что в этот момент мы можем назвать Go параллельным языком) или планировщик просто переключает контекст между этими двумя потоками (возможно,на вызов fmt.Printf) и выполнение только одного цикла за один (параллелизм, а не истинный параллелизм, как автор упомянул в приведенной выше цитате)?

Я в замешательстве.

1 Ответ

0 голосов
/ 22 октября 2018

В вашем случае функция, которая печатает az и 1-27, запускается одновременно, и вы ожидаете, пока обе процедуры go завершатся.При наличии нескольких подпрограмм go ваша идея должна быть параллельной, но если ваше аппаратное обеспечение поддерживает, они могут работать параллельно.

Параллельность - это не параллелизм

Кроме того, переключатели контекста тяжелы, поэтому большинствовремен они, скорее всего, не сделали.Программы Go действительно легки, и сотни из них могут выполняться одновременно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...