матрицы попарно (суму 1-го с последним, 2-го с n-1 и тд). Далее составить массив из сумм элементов и повторять операции до тех пор, пока массив не будет содержать один элемент - сумму всех элементов. Вообщем, суть задачи не суть важна, важно следующее: каждая операция суммирования должна проводится в отдельном потоке, и, вместо того, чтобы создавать новые горутины с каждой итерацией, желательно создать их один раз, заставить их посчитать некоторое кол-во раз и закрыть в итоге, для экономии ресурсов. В го я профан, не знаю как держать горутины постоянно открытыми, но накидал такой код, который не работает. В нем нет решения задачи, а просто пример, как я планировал работать с горутинами. Подскажите, как это можно сделать?
https://go.dev/tour/concurrency/2
В примере, как я понял, создались горутины, вычислили суму, записали в канал и закрылись. И в каждой итерации придется заново создавать их. Есть вариант, чтобы они не закрывались, или это плохая практика в го?
Не обязательно же выходить из горутины. Можно отправлять работу (слайс в вашем случае, видимо) через канал, результат через другой канал возвращать, потом ждать новой работы, пока входящий канал не будет закрыт
ждать работы в бесконечном цикле, да?
for arg := range argsChannel Ни бесконечный цикл, ни select вам не нужны
Наверное, я не понимаю жизненный цикл горутины. Думал, что если она отработает весь код то просто завершится и сборщик мусора её удалит
Обсуждают сегодня