Вопросы по теме '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 просмотров
schedule
16.04.2023
Могут ли подпрограммы Go совместно владеть каналом?
Я понимаю, что обычно, если я хочу получить доступ к переменной вне области видимости из подпрограммы Go, я обязан создать копию, которая будет концептуально принадлежать подпрограмме Go. Это также верно для каналов, или они освобождены?...
1049 просмотров
schedule
13.05.2022
Перейти к чтению текста с горутиной
Я хочу прочитать текстовый файл с горутинами. Порядок текста, считываемого из файла, не имеет значения. Как прочитать файл с параллелизмом?
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