HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-03-10
1 <p><strong>Инструменты параллельного программирования</strong>позволят вам облегчить выражение даже в случае немногопоточности. Рассмотрим пример, извлеченный из RPC-пакета.</p>
1 <p><strong>Инструменты параллельного программирования</strong>позволят вам облегчить выражение даже в случае немногопоточности. Рассмотрим пример, извлеченный из RPC-пакета.</p>
2 <p>Итак, у нас есть клиентская программа, которая выполняет цикл получения данных из какого-нибудь источника, допустим, сети. Во избежание выделения и освобождения буферов, программа сохраняет свободный список, а также применяет буферизованный канал для его представления. В том случае, когда канал пуст, происходит выделение нового буфера. Если же буфер сообщений готов, то он отправляется на сервер<strong>serverChan</strong>.</p>
2 <p>Итак, у нас есть клиентская программа, которая выполняет цикл получения данных из какого-нибудь источника, допустим, сети. Во избежание выделения и освобождения буферов, программа сохраняет свободный список, а также применяет буферизованный канал для его представления. В том случае, когда канал пуст, происходит выделение нового буфера. Если же буфер сообщений готов, то он отправляется на сервер<strong>serverChan</strong>.</p>
3 <p>Таким образом, цикл сервера получает каждое сообщение от клиента, а потом обрабатывает его с последующим возвращением буфера в свободный список.</p>
3 <p>Таким образом, цикл сервера получает каждое сообщение от клиента, а потом обрабатывает его с последующим возвращением буфера в свободный список.</p>
4 <p>Идем дальше: клиент пытается получить буфер из<strong>freeList</strong>. В том случае, если ни один из них не доступен, выделяется новый. При этом отправка сервером в<strong>freeList</strong>возвращает<strong>b</strong>в перечень свободных, но только в том случае, когда список не полный. В обратном случае буфер выбрасывается с целью его последующей утилизации сборщиком мусора (условие<strong>default</strong>в select-операторах выполняются лишь тогда, когда ни один другой случай не является готовым, что означает следующее:<strong>select</strong>никогда не блокируется.) Следовательно, вышеописанная реализация создает список без утечек памяти, причем всего в несколько строк, полагаясь при этом на буферизованный канал + сборщик мусора для учета.</p>
4 <p>Идем дальше: клиент пытается получить буфер из<strong>freeList</strong>. В том случае, если ни один из них не доступен, выделяется новый. При этом отправка сервером в<strong>freeList</strong>возвращает<strong>b</strong>в перечень свободных, но только в том случае, когда список не полный. В обратном случае буфер выбрасывается с целью его последующей утилизации сборщиком мусора (условие<strong>default</strong>в select-операторах выполняются лишь тогда, когда ни один другой случай не является готовым, что означает следующее:<strong>select</strong>никогда не блокируется.) Следовательно, вышеописанная реализация создает список без утечек памяти, причем всего в несколько строк, полагаясь при этом на буферизованный канал + сборщик мусора для учета.</p>
5 <p><em>По материалам https://golang-blog.blogspot.com/.</em></p>
5 <p><em>По материалам https://golang-blog.blogspot.com/.</em></p>
6  
6