У меня есть простое 2-х файловое приложение.Я пытаюсь провести тестирование сообщений ping и pong на 2 каналах.
Цель состоит в том, чтобы запустить эталонный тест, чтобы увидеть, сколько можно выполнить ping и pong туда и обратно (вот почему я пропускаю попытки, чтобыбенчмарк может продолжать работать на разных входах)
По какой-то причине локально это отображается только при запуске:
go build
./main
Вывод:
ping
pong
ping
pong
ping
pong
ping
pong
ping
Почемуэто конец после стольких итераций?
main.go
package main
import (
"fmt"
)
func main() {
PingPong(1000)
var input string
fmt.Scanln(input)
fmt.Println("done!")
}
ping.go
package main
import "fmt"
func PingPong(attempts int) {
pingCh := make(chan string)
pongCh := make(chan string)
go pinger(pingCh, pongCh)
go ponger(pingCh, pongCh, attempts)
pingCh <- "ping"
}
func pinger(pingCh chan string, pongCh chan string) {
for {
_ = <-pingCh
fmt.Println("ping")
pongCh <- "pong"
}
}
func ponger(pingCh chan string, pongCh chan string, attempts int) {
counter := 0
for {
msg := <-pongCh
fmt.Println(msg)
counter++
if counter == attempts {
fmt.Println(counter)
break
}
pingCh <- "ping"
}
}
ping_test.go
package main
import "testing"
func benchmarkPingPong(i int, b *testing.B) {
for n := 0; n < b.N; n++ {
PingPong(n)
}
}