Вопросы по теме 'goroutine'

Как узнать, сделана ли горутина, без блокировки?
Все примеры, которые я видел до сих пор, включают блокировку для получения результата (с помощью оператора <-chan ). Мой текущий подход включает передачу указателя на структуру: type goresult struct { result resultType; finished...
6559 просмотров
schedule 01.08.2023

Можно ли получить результат от одной из нескольких горутин в Go?
Я только недавно узнал о языке программирования Google Go. Меня заинтриговала предлагаемая им поддержка параллелизма, и я решил узнать о ней больше. Тем не менее, я пошел посмотреть, как Go реализует определенную функцию параллелизма, и до сих пор я...
433 просмотров
schedule 01.06.2023

golang: goroute с select не останавливается, пока я не добавлю fmt.Print()
Я попробовал Go Tour упражнение №71 . Если он запускается как go run 71_hang.go ok , он работает нормально. Однако, если вы используете go run 71_hang.go nogood , он будет работать вечно. Единственная разница заключается в дополнительных...
8823 просмотров
schedule 29.02.2024

Блокировка канала отправляет неверную парадигму синхронизации и почему
Effective Go дает следующий пример того, как имитировать семафор с каналами: var sem = make(chan int, MaxOutstanding) func handle(r *Request) { <-sem process(r) sem <- 1 } func init() { for i := 0; i < MaxOutstanding;...
696 просмотров
schedule 27.11.2022

Дождитесь завершения n горутин
Мне нужно запустить огромное количество горутин и дождаться их завершения. Интуитивный способ, кажется, использует канал, чтобы дождаться, пока все они не будут завершены: package main type Object struct { //data } func (obj *Object)...
12584 просмотров
schedule 18.06.2022

Перейти к параллелизму и путанице в каналах
Я новичок в Go, и у меня проблемы с пониманием параллелизма и канала. package main import "fmt" func display(msg string, c chan bool){ fmt.Println("display first message:", msg) c <- true } func sum(c chan bool){ sum := 0 for...
404 просмотров
schedule 18.07.2023

Как связанные функции выполняются как горутины?
Учитывая эту игровую площадку : package main import "fmt" func main() { go oneFunc().anotherFunc() } func oneFunc() something { fmt.Println("oneFunc") return something{} } type something struct{} func (s something) anotherFunc()...
670 просмотров
schedule 07.05.2023

Могу ли я принудительно завершить горутину, не дожидаясь ее возврата?
Позвольте мне использовать пример: func WaitForStringOrTimeout() (string, error) { my_channel := make(chan string) go WaitForString(my_channel) select { case found_string := <-my_channel: return found_string, nil case...
1781 просмотров

Могут ли подпрограммы Go совместно владеть каналом?
Я понимаю, что обычно, если я хочу получить доступ к переменной вне области видимости из подпрограммы Go, я обязан создать копию, которая будет концептуально принадлежать подпрограмме Go. Это также верно для каналов, или они освобождены?...
1049 просмотров

Перейти к чтению текста с горутиной
Я хочу прочитать текстовый файл с горутинами. Порядок текста, считываемого из файла, не имеет значения. Как прочитать файл с параллелизмом? scanner := bufio.NewScanner(file) for scanner.Scan() { lines = append(lines, scanner.Text()) }...
565 просмотров
schedule 11.01.2023

Go игнорирует GOMAXPROCS
Я пытаюсь запустить горутину (версия go1.4.1 darwin/amd64) одновременно с бесконечным циклом в основном потоке, и я не могу заставить ее работать. Если я правильно понял, go должен запланировать горутину для других потоков, если я укажу GOMAXPROCS,...
465 просмотров
schedule 24.12.2022

Не увидеть ожидаемых побочных эффектов от горутин
Я пытаюсь понять горутины. Возьмите этот код: package main import "fmt" var ( b1 []float64 b2 []float64 ) func main() { go fill(&b1, 10) go fill(&b2, 10) fmt.Println(b1,b2) var s string fmt.Scanln(&s)...
81 просмотров
schedule 14.04.2023

Обертывание вызова функции в замыкание при использовании горутин
Оборачивание вызова функции в замыкание приводит к неожиданному поведению при использовании горутин. Рассмотрим следующий пример: package main import ( "log" "sync" "time" ) var workerNum = 5 var wg sync.WaitGroup func block() {...
686 просмотров
schedule 04.03.2023

перейти на срез диапазона и вызов метода goroutine, логика позади
Код выглядит следующим образом: package main import ( "fmt" "time" ) type field struct { name string } func (p *field) print() { fmt.Println(p.name) } func main() { data :=...
317 просмотров
schedule 16.10.2022

Нужна помощь, чтобы разобраться в этом странном поведении рутины го
У меня есть следующий код, использующий подпрограммы go: package main import ( "fmt" "time" ) func thread_1(i int) { time.Sleep(time.Second * 1) fmt.Println("thread_1: i: ",i) } func thread_2(i int) {...
64 просмотров
schedule 15.05.2022

Как дождаться группы горутин?
скажем, я хочу запустить группу горутин и дождаться их завершения (например, возврата). Я могу придумать какое-то решение на основе канала (например, создать канал и прослушать его, подсчитывая полученные сообщения, которые должны быть отправлены...
2851 просмотров
schedule 27.02.2023

Какие API использовать для реализации CSP/GoRoutines в .NET/F#
Я возвращаюсь к .NET после отпуска на некоторое время в 2,0 дня. Теперь я вижу множество API/библиотек для управления параллелизмом в .NET. Мне нравится, как чувствуют себя GoRoutines, и я хочу иметь что-то похожее в .NET/F#, но я не уверен, что...
191 просмотров
schedule 29.03.2024

Действительно ли структура копируется между горутинами, если она отправляется по каналу Golang?
Если большая структура отправляется по каналу в Go, действительно ли она копируется между горутинами? Например, в приведенном ниже коде будет ли Go фактически копировать все данные largeStruct между производителем и потребителем горутин?...
6696 просмотров
schedule 18.01.2023

GoLang: распаковать bz2 в горутине, использовать в другой горутине
Я новичок в SWE, изучаю Go (и люблю его). Я создаю парсер для файлов дампа Википедии - в основном огромный XML-файл, сжатый bzip2 (~ 50 ГБ без сжатия). Я хочу выполнять как потоковую декомпрессию, так и синтаксический анализ, что звучит...
1197 просмотров
schedule 19.05.2022

Объясните: не общайтесь, разделяя память; делиться памятью, общаясь
Интересно, какое самое простое объяснение этой знаменитой цитаты: Не общайтесь, разделяя память; делитесь памятью, общаясь. (Р. Пайк) В модели памяти Go я могу прочитать следующее: Отправка по каналу происходит до завершения...
10935 просмотров
schedule 04.07.2022