Что такое poll в Go

«Что такое poll в Go» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Poll в Go — это метод проверки состояния ресурса (например, файлового дескриптора, канала или сокета) в цикле, пока он не станет доступным для чтения/записи или не произойдёт таймаут.

Пример с net пакетом:

conn, err := net.Dial("tcp", "example.com:80")
if err != nil {
    log.Fatal(err)
}
defer conn.Close()

buf := make([]byte, 1024)
for {
    n, err := conn.Read(buf) // Polling чтения
    if err != nil {
        break
    }
    fmt.Println(string(buf[:n]))
}

Нюансы:

  • Polling может нагружать CPU, если не добавить задержку (например, time.Sleep).
  • В Go предпочтительнее использовать блокирующие операции или select с каналами/таймаутами.
  • Для эффективного ожидания событий лучше применять epoll (Linux) или kqueue (BSD) через пакеты вроде golang.org/x/sys.