170 похожих чатов

Вот смотрю язык, нраица. Только вот не понял, а как сделать

такую штуку

Есть канал. У канала 1 воркер, несколько отправителей

Есть воркер-горутина. Он слушает канал. Дабы не потреблять в for-select-case-default много ресурсов cpu, и не костылить со Sleep в дефолте, пока из канали не придёт сообщение, воркер ждёт. Читай — заблокирован в for-select-case

Есть много горутин-отправителей, у них есть ссылка на канал, горутины-отправители могут просыпаться в любой момент.

Вопрос прост — почему я не могу сделать так, чтобы у меня крутился forever воркер и хендлил сообщения в канале от sender’ов? Сплошные дедлоки…

15 ответов

21 просмотр

А код можно? Или репродьюс. Желательно на play.golang.org

𝖁𝖎𝖙𝖆𝖑𝖎𝖞-𝕾 Автор вопроса

В эрланге проще. Там воркеры-gen_server по умолчанию заблокированы без сообщений и слушают “почтовый ящик”

𝖁𝖎𝖙𝖆𝖑𝖎𝖞 𝕾
В эрланге проще. Там воркеры-gen_server по умолчан...

Вообще если вы в форе слушаете канал, в селекте без дефолта или в явной форме (a := <- ch), то он будет заблокирован пока не появится данных

𝖁𝖎𝖙𝖆𝖑𝖎𝖞-𝕾 Автор вопроса
Евгений Омельченко
Вообще если вы в форе слушаете канал, в селекте бе...

Ща, тогда просто попробую запустить слушалку (playground скину)

А кто мешает просто заблокироваться на чтении из канала? Типа for { select { case task := <- tasks: // do tasks case <-ctx.Done() } }

𝖁𝖎𝖙𝖆𝖑𝖎𝖞 𝕾
🤔 изучу

https://tour.golang.org/welcome/1 https://gobyexample.com/

𝖁𝖎𝖙𝖆𝖑𝖎𝖞-𝕾 Автор вопроса
Евгений Омельченко
Вообще если вы в форе слушаете канал, в селекте бе...

Дико извиняюсь. Не могу воспроизвести. Вчера мог воспроизвести, сейчас код с нуля написал (не сохранилось, как оказалось), и проблемы не возникло. worker висит, ждёт, отрабатывает сообщения жобы отправляют в канал сообщения WaitGroup нормально отрабатывает. 😅

Ещё советую for range, если канал один

𝖁𝖎𝖙𝖆𝖑𝖎𝖞-𝕾 Автор вопроса
Евгений Омельченко
Ещё советую for range, если канал один

Баг попався! https://play.golang.org/p/RoN1qVP86j9 Как я понял, проблема том, что for range {} ждёт сообшения из незакрытого канала, в который никто никогда не напишет. Но как закрыть канал, если отправителей много?

𝖁𝖎𝖙𝖆𝖑𝖎𝖞-𝕾 Автор вопроса

Похожие вопросы

Обсуждают сегодня

Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
48
Всем привет! Скажите, никто не пытался уменьшить размер процесса ssl, которые ассоциируется с открытым соединением (не помню точное название этого процесса, но там была какая-...
Алексей
20
а проверьте, собирается ли у кого сейчас транк лазаря через делюкс? у меня вот: fpcupdeluxe: info: Lazarus Native Installer (BuildModuleCustom: UserIDE): LazBuild: building Us...
Iluha Companets
20
Мне тут приспичило встроить в программу форматировние текста SQL, расставить переносы строк и отступы так, чтобы лучше читалось. Я что-то свое изобразил, оно после ключевых сл...
Sergey Bodrov
11
This is a big issue. Just by being a citizen of a country, you are denied to contribute to Open Source software: https://youtu.be/L5Ec5jrpLVk?si=1iIuHnMPbCB4anV-
Sharuzzaman Ahmat Raslan
72
добрый день. возможно ли изменить цвет окон лазаруса? Как?
Budemposmotret
35
Господа, а кто-нибудь сталкивался с размещением на TTabControl/TTabSheet множества контролов (> 100) с последующими External: Access violation? Вот буквально на ровном месте. ...
Dmitry
29
А какие существуют способы обработки ошибок выделения памяти в ядре? Т.е., допустим, есть функция, которая возвращает адрес свободной страницы в физической памяти и диапазон в...
disba1ancer
51
Добрый день. Опять снова хочу обратиться к вам за помощью. После создания проэкта stack new, lazy.nvim + nvim-lspconfig/haskell-tools + hlint, ormolu из mason + hls из ghcup ...
Nannk
8
Does anyone have some zeroday's left?
Wito!d ♥️🩷
44
Карта сайта