четверг, 28 февраля 2019 г.

Go Code Review Comments: Время жизни goroutine

Когда вы порождаете go-процедуры, делайте четким и ясным время, когда они завершаются (или не завершаются).

go-процедуры могут приводить к утечке памяти из-за блокирования при отправке в каналы или получении из каналов: сборщик мусора не прекратит выполнение go-процедуры, даже если каналы, по которым они заблокированы, недоступны.

Даже когда go-процедуры не приводят к утечкам памяти, оставление их в подвешенном состоянии, когда они больше не нужны, может вызвать другие тонкие и трудно диагностируемые проблемы. Отправка panic по закрытым каналам. Изменение находящихся в использовании вводимых данных «после того, как результат не нужен», может привести к "гонкам за данные" (data races). А оставление go-процедур в подвешенном состоянии в течение сколь угодно долгого времени может привести к непредсказуемому использованию памяти.

Постарайтесь, чтобы конкурентный код был достаточно простым, чтобы время жизни go-процедур было очевидным. Если это просто невозможно, документируйте, когда и почему выход из go-процедуры будет завершен.


Читайте также:


Комментариев нет:

Отправить комментарий