Vladislav
кек
Vladislav
типичная xy problem
Юра (Юрий Александрович)
принимающих рутин порождается столько, сколько получится. А обрабатывающих и отвечающих - только столько, сколько CPU
Юра (Юрий Александрович)
kostyaBro
Alexander
ну тогда речь идет о написании твоего хттп сервера. причем тут стандартный?
Alexander
Юра (Юрий Александрович)
да нет тут в коде своего хттп сервера...
Vladislav
это вебсокеты.
а, я понял, и типа приходят сообщения и ответ будет когда будет, не обязательно по порядку
Alexander
если кто-то поймет о чем речь, то, пожалуйста, напишите. потому что это какой-то оксюморон идет уже
Vladislav
ясно, ну очередь надо обычную юзать, а не просто буферизованные каналы
Vladislav
тем более что просто мьютекс работает в разы быстрее канала
Юра (Юрий Александрович)
Vladislav
есть смысл задуматься
Юра (Юрий Александрович)
Мьютекс позволяет работать только кому-то одному. А у нас запросы могут приниматься пиково тысячами, а обрабатываться фиксированным числом воркеров.(внутри воркеров, конечно тоже есть мьютексы на некоторых операциях, но это уже другое)
Vladislav
не шарите, как каналы внутри работают
Vladislav
канал по сути и есть очередь с мьютексом
Vladislav
только один из неё или достаёт или кладёт
Vladislav
мьютекс не надо держать всё время обработки
Юра (Юрий Александрович)
только запись/чтение из канала - это очень короткая операция. Надолго в ней застрять нельзя.
Vladislav
только когда обмен идёт
Vladislav
готовая реализация https://github.com/phf/go-queue
Илья
Vladislav
можно ресайзить
Vladislav
правда удобную работу с селект-ом без каналов не сделать
Vladislav
потому что го так завязан
Vladislav
я думаю лучше всего вот как сделать
Vladislav
действительно ставить в очередь через канал
Vladislav
а там уже перегружать в какую-нить очередь на связанных списках
Vladislav
а с другого конца выбирать из этой очереди и засыпать, если очередь пустая пока новой задачей не разбудят
Vladislav
https://pkg.go.dev/github.com/antigloss/go/concurrent/container/queue#LockfreeQueue
Vladislav
с пробуждением ридера из очереди, правда, придётся заморочиться
Vladislav
зато будет условно бесконечная автоматически-масштабируемая очередь
Юра (Юрий Александрович)
Vladislav
так ты можешь вытаскивать из очереди каким-то циклом и так же в канал класть
Vladislav
главное чтобы вот этот кусок посередине был "резиновый"
Юра (Юрий Александрович)
да, все это можно. Но это все сложнее, чем мечтать о каналах переменной длины )
Alexander
Alexander
вообще мьютекс можно заменить каналом с буфером 1, и тогда селекты будут работать
Alexander
просто сдвигаешь начало слайса, иногда копируешь, чтобы освободить память
Alexander
связанный список же плохой по отношении к памяти объект
Alexander
фишка в том, что ты можешь вставить в любое место или извлечь элемент из любого места, а если из начала и конца забирать, то зачем?
Alexander
слишком дорого это с точки зрения кэша и GC
Юра (Юрий Александрович)
указатели за долгое время работы программы так засрут и фрагментируют память, что никакой GC не справится. Разве что элементы списка выделять не в куче, а в каком-то реюзабельном пуле
Vladislav
Vladislav
надо их запретить тогда
Vladislav
ох уж эти указатели
Vladislav
если ctypes не трогать да
Aziz
привет всем
done := make(chan bool)
fmt.Println(*done)
вот так не могу получить false потому что это канал а не pointer ?
Vladislav
а причём тут поинтер вообще?
Vladislav
ну и операция чтения из канала должны быть: <-done
Aziz
хорошо, смотри
если я сейчас сделаю
fmt.Printf("%v", done) что то типа 0xc0000220c0 получу, а это название ячейки
Vladislav
я думаю, ты получишь название типа
Aziz
ой нет не %T а %v
Andrey
Vladislav
то что ты получишь при форматировании в строку - не показатель, чем этот тип является для го
Aziz
Что ?? Хорошо, по другому
0xc0000220c0 —-> вот это кроме названии ячейки еще что то может быть ?
Andrey
Aziz
понял, пойду тогда дальше читать )
Не ну это
/settings@SimpleCleanup_bot
Не ну это
Бля куда я нажал
𝙲𝚊𝚝𝚒𝚘𝚗
ГОГООО СПИДРАН ПО БАНУ
Не ну это
/ricardo
𝙲𝚊𝚝𝚒𝚘𝚗
F
𝙲𝚊𝚝𝚒𝚘𝚗
еще один
Не ну это
Чо рили забанило?
Anonymous
зачем...
Anonymous
?
Vladislav
Anonymous
Anonymous
Бля
Anonymous
Чзх
Anonymous
Anonymous
Илья
эээээ
Anonymous
Зачем?