CGо — это мощный и удобный инструмент, позволяющий вызывать любые функции на C/C++, не опасаясь блокировки своей Go-программы. Однако за это удобство приходится расплачиваться в случае неблокирующих вызовов, таких как асинхронные операции в ядре ОС или числодробительные задачи (сжатие/распаковка, криптография, математические расчеты и т. д.).
Помимо накладных расходов на каждый вызов C, нас также может ожидать неожиданная просадка производительности при обработке больших объемов данных. Кроме того, использование CGо может привести к потере гарантий на время исполнения горутин.
В докладе мы разберем случаи, когда CGо может негативно сказаться на производительности проекта. Обсудим, как Go внутри своего рантайма «экономит» на неблокирующих вызовах, как мы можем использовать эти механизмы, а также рассмотрим другие обходные пути.