2017-02-05 4 views
-1

Так как это, как правило, очень мало накладных расходов с точки зрения потребности в памяти и установки/срыва стоимости процедуры Go. Является ли это актуальным даже для реализации рабочего пула (go) рабочего пула? Когда вы рассмотрите возможность использования пула потоков вместо «нерестилища» для каждого запроса?Является ли «объединение потоков» релевантным для Go?

+0

Если вы используете блокировку ввода-вывода, вам следует рассмотреть возможность использования пула потоков вместо goroutine. – ymonad

+0

@ymonad, что вы имеете в виду, блокируя IO? В Go все IO блокируется, это все зависит от модели параллелизма. Если вы имеете в виду файл IO, который внутренне сильно отличается от сетевого ввода-вывода, то проблема не в том, что касается goroutines вообще. Речь идет о реальных потоках ОС, ожидающих возврата системных вызовов. – creker

+0

@crecker То, что я намеревался, заключалось в том, что, если использовать сетевую библиотеку go, которая не является блокировкой, вы получите преимущество M: N нитевой модели goroutine, однако, когда вы используете системный вызов, который блокирует IO, планировщик go создает один поток на goroutine, поэтому использование пула потоков может быть опцией. https://groups.google.com/forum/#!topic/golang-nuts/Luje-okL4jI – ymonad

ответ

2

Нерест и хранение множества горутов в голанге дешево, но это не бесплатно.

Также вы должны помнить, что сам горутин может быть очень дешевым, но в то же время в коде goroutine может быть выделена большая часть памяти. Таким образом, вы можете ограничить количество одновременно работающих goroutines.

Вы можете использовать семафор для ограничения ресурсов. Другой подход (более идиоматический для перехода) заключается в использовании конвейерных конвейеров с рабочими пулами. Этот шаблон очень хорошо описан в golang blog.

1

Да, это актуально. db/sql использует пул соединений с базой данных, поскольку для установления нового соединения требуется время.

+1

Это немного не соответствует теме - объединение соединений с базой данных не совсем такое же, как объединение потоков. –

Смежные вопросы