Vladislav
нет, хттп-сервер стандартный.
так у тебя всё равно горутина с хандлером ответа ждёт, чтобы его в респонсрайтер записать
Vladislav
кек
Vladislav
типичная xy problem
Юра (Юрий Александрович)
принимающих рутин порождается столько, сколько получится. А обрабатывающих и отвечающих - только столько, сколько CPU
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
вообще мьютекс можно заменить каналом с буфером 1, и тогда селекты будут работать
Vladislav
зачем связанные списки?
предлагаете массив ресайзить?
Alexander
просто сдвигаешь начало слайса, иногда копируешь, чтобы освободить память
Alexander
связанный список же плохой по отношении к памяти объект
Alexander
фишка в том, что ты можешь вставить в любое место или извлечь элемент из любого места, а если из начала и конца забирать, то зачем?
Vladislav
фишка в том, что ты можешь вставить в любое место или извлечь элемент из любого места, а если из начала и конца забирать, то зачем?
чтобы не ресайзить как раз. если элемент-член очереди формируется и передаётся откуда-то, то дешевле слинковать указатели, чем копировать
Alexander
слишком дорого это с точки зрения кэша и GC
Юра (Юрий Александрович)
указатели за долгое время работы программы так засрут и фрагментируют память, что никакой GC не справится. Разве что элементы списка выделять не в куче, а в каком-то реюзабельном пуле
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
хорошо, смотри если я сейчас сделаю fmt.Printf("%v", done) что то типа 0xc0000220c0 получу, а это название ячейки
Если ты так же сделаешь для интерфейса ты тоже получишь указатель
Vladislav
то что ты получишь при форматировании в строку - не показатель, чем этот тип является для го
Aziz
Что ?? Хорошо, по другому 0xc0000220c0 —-> вот это кроме названии ячейки еще что то может быть ?
Andrey
Aziz
понял, пойду тогда дальше читать )
Не ну это
/settings@SimpleCleanup_bot
Не ну это
Бля куда я нажал
𝙲𝚊𝚝𝚒𝚘𝚗
ГОГООО СПИДРАН ПО БАНУ
Не ну это
/ricardo
𝙲𝚊𝚝𝚒𝚘𝚗
F
𝙲𝚊𝚝𝚒𝚘𝚗
еще один
Не ну это
Чо рили забанило?
Anonymous
зачем...
Anonymous
?
Vladislav
Anonymous
Anonymous
Бля
Anonymous
Чзх
Anonymous
Anonymous
Илья
эээээ
Anonymous
Зачем?