[БЕЗ_ЗВУКА] А теперь рассмотрим пул воркеров. Довольно часто в архитектуре встречаются случаи, когда работа осуществляется через какие-то очереди, с которыми работают какие-то офлайновые уже «разгребаторы». Вот. Часто для этих целей есть «форкающиеся демоны», но в Go можно поступить гораздо проще. Мы можем создать сразу просто несколько горутин, которые будут читать из какого-то канала. И если нам приходит какая-то задача, мы просто будем писать ее в этот канал. А там воркеры уже дальше сами разберутся. Давайте посмотрим это в работе. Вот смотрите: вы видите результат. У нас есть три воркера, которые просто выводят что-то на экран. Я также показал номер горутины и ту задачу, которую они получили; в данном случае это просто времена месяцев. Как это работает внутри? Смотрите. Для начала мы просто имеем какое-то количество горутин, и мы, используя в запуск горутины функцию go, просто запускаем воркер, просто запускаем функцию. Внутри этой функции она просто начинает читать из канала, и всё. Вот и вся работа. При этом если вдруг нам нужно завершить этот пул воркеров, например, он отработал свою задачу, то мы можем просто закрыть этот канал, и тогда цикл, в котором крутится внутри воркер, закончится. При этом если вдруг не закрыть этот канал, то давайте посмотрим, что произойдет. Мы не дождались окончания работы воркера. Смотрите: после того как воркер заканчивает свою работу, он пишет нам какой-то текст. Вот, например: «Я номер такой-то, я закончил». В данном случае мы этого текста не видим. Что произошло? Произошло то, что наша программа, наша функция main, она завершила свою работу, при этом она не стала ждать каких-то других горутин, и поэтому воркер не завершился корректно. В каких-то других случаях это может привести к утечкам горутин либо же к дедлоку. Будьте осторожны. Это был пул воркеров.