Я следующий код, используя процедуры выбирали и:Нужна помощь, чтобы понять это странное bahaviour Гоу рутин
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) {
time.Sleep(time.Second * 1)
fmt.Println("thread_2: i: ",i)
}
func main() {
for i := 0; i < 100; i++ {
go thread_1(i)
go thread_2(i)
}
var input string
fmt.Scanln(&input)
}
Я ожидал, что каждый идет процедура будет ждать второй, а затем распечатать его значение I.
Однако обе процедуры обработки ожидали по 1 секунде и печатали все значения i одновременно.
Другой вопрос в том же контексте: У меня есть сервер-клиентское приложение, в котором сервер запускает процедуру приема, чтобы получать данные от клиента по одному для каждого клиентского соединения. Затем приемник запускает процедуру, которая запускает подпрограмму рабочего процесса, называемую процессором, для обработки данных. Могут существовать несколько процедур для приема на приемник и, следовательно, несколько программных подпрограмм. В таком случае некоторые приемники и процессорные подпрограммы могут свирепствовать бесконечно.
Пожалуйста, помогите мне понять это поведение.
Вы должны понять, что заявление 'идти thread_1()' возвращает сразу, поэтому все ваши goroutines созданы в очень короткий промежуток времени, так что все 200 Сон вызовет почти одновременно. – SirDarius