Текущий буфер в Go | OTUS

Курсы

Программирование
PHP Developer. Basic
-50%
Специализация PHP Developer iOS Developer. Professional Golang Developer. Professional Python Developer. Basic iOS Developer. Basic Архитектура и шаблоны проектирования MS SQL Server Developer Highload Architect Специализация C++ Developer Cloud Solution Architecture Специализация Java-разработчик Android Developer. Professional Программист С Специализация Fullstack developer VR/AR - разработчик Microservice Architecture Software Architect Team Lead Web-разработчик на Python Rust Developer NoSQL C# Developer. Professional Разработчик программных роботов (RPA) на базе UiPath и PIX Kotlin Backend Developer React.js Developer Node.js Developer Flutter Mobile Developer Symfony Framework C# Developer. Basic Unreal Engine Game Developer Groovy Developer
Специализации Курсы в разработке Подготовительные курсы Подписка
+7 499 938-92-02

Текущий буфер в Go

GoPro_Headline_970x70-1801-dc9277.png

Инструменты параллельного программирования позволят вам облегчить выражение даже в случае немногопоточности. Рассмотрим пример, извлеченный из RPC-пакета.

Итак, у нас есть клиентская программа, которая выполняет цикл получения данных из какого-нибудь источника, допустим, сети. Во избежание выделения и освобождения буферов, программа сохраняет свободный список, а также применяет буферизованный канал для его представления. В том случае, когда канал пуст, происходит выделение нового буфера. Если же буфер сообщений готов, то он отправляется на сервер serverChan.

1-1801-756cda.png

Таким образом, цикл сервера получает каждое сообщение от клиента, а потом обрабатывает его с последующим возвращением буфера в свободный список.

2-1801-c3c40b.png

Идем дальше: клиент пытается получить буфер из freeList. В том случае, если ни один из них не доступен, выделяется новый. При этом отправка сервером в freeList возвращает b в перечень свободных, но только в том случае, когда список не полный. В обратном случае буфер выбрасывается с целью его последующей утилизации сборщиком мусора (условие default в select-операторах выполняются лишь тогда, когда ни один другой случай не является готовым, что означает следующее: select никогда не блокируется.) Следовательно, вышеописанная реализация создает список без утечек памяти, причем всего в несколько строк, полагаясь при этом на буферизованный канал + сборщик мусора для учета.

1-1801-cc4bfd.png

По материалам https://golang-blog.blogspot.com/.

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться