Вопрос по fasthttp: можно как нибудь запихать в RequestCtx инстанцию

условного типа Х которая будет предоставлена той горутиной, которая обрабатывает запрос? при обработке каждого запроса создавать инстанцию невыгодно, создавать contention на shared инстанции тоже

russian software it database go

22 ответов

а чем тебе sync.Pooll не решение?

Roman-Sharkov Автор вопроса
Daniel Podolsky
а чем тебе sync.Pooll не решение?

надо бы запустить бенчмарк и посмотреть насколько высок contention overhead с sync.Pool'ом 🤔

Roman-Sharkov Автор вопроса

https://go.dev/play/p/a6EgbF632nn contentionbench % go run bench.go -i 10_000_000 -g 10 -m shared 2022/08/06 12:38:39 goroutines: 10 2022/08/06 12:38:39 mode: shared 2022/08/06 12:38:50 took: 10.955198291s contentionbench % go run bench.go -i 10_000_000 -g 10 -m syncpool 2022/08/06 12:38:57 goroutines: 10 2022/08/06 12:38:57 mode: syncpool 2022/08/06 12:38:57 took: 120.561875ms contentionbench % go run bench.go -i 10_000_000 -g 10 -m per-goroutine 2022/08/06 12:39:05 goroutines: 10 2022/08/06 12:39:05 mode: per-goroutine 2022/08/06 12:39:05 took: 34.094542ms sync.Pool приблизительно в 3.5 раза менее эффективен чем per-goroutine

Roman Sharkov
https://go.dev/play/p/a6EgbF632nn contentionbench...

В чем проблема сделать shared map[goroutine_id]*X?

Roman-Sharkov Автор вопроса
Źmićer Rubinštejn
В чем проблема сделать shared map[goroutine_id]*X?

а разве на goroutine_id можно полагаться?

Roman Sharkov
а разве на goroutine_id можно полагаться?

Ну видимо если они не пересоздаются - то да

если будешь юзать синкпул не меняй и не трогай объект когда отдал его пулу

Для этого и создали контекст) конечно можно

Roman-Sharkov Автор вопроса

естественно это не много, но зачем, если это лишний overhead? 🙂 если же конечно fasthttp не предоставляет возможности некой goroutine-local memory, тогда, разумеется, ответ (sync.Pool) очевиден

Roman Sharkov
естественно это не много, но зачем, если это лишни...

еще раз… ты вообще способен разницу намерять не на синтетическом тесте, а на реальной нагрузке с реальными обработчиками? если нет - не надо компостировтаь мозги себе и товарищам. я, глядя на 10M итераций и 110ms разницы, уверен, что нет, не сможешь ты там ничего намерять

Roman-Sharkov Автор вопроса

https://go.dev/play/p/PhinZ6ijNSH 2022/08/06 13:11:50 goroutines: 10 2022/08/06 13:11:50 modes: [per-goroutine syncpool atomicindex sharedinst] 2022/08/06 13:11:50 mode per-goroutine (21.16ms) 2022/08/06 13:11:50 mode syncpool (60.95625ms) 2022/08/06 13:11:54 mode atomicindex (3.846955542s) 2022/08/06 13:11:59 mode sharedinst (5.728765416s) надеюсь, ошибок не допустил, но не вариант

Roman-Sharkov Автор вопроса
Roman Sharkov
https://go.dev/play/p/PhinZ6ijNSH 2022/08/06 13:1...

более того, atomicindex кидает data race

слушай, ну этот канал дети же читают! чему ты их учишь? тому, что не надо брать решение в лоб, если оно на 0.001% дороже?

Человек хочет оптимизировать, проявить творчество, подумать над задачей как инженер. Не надо опять про свой IO рассказывать, особенно в такой форме, ну серьёзно. Нечего написать по делу - не пишите

Roman-Sharkov Автор вопроса
Daniel Podolsky
слушай, ну этот канал дети же читают! чему ты их ...

буду добавлять дисклеймер для <middle 😅 ДИСКЛЕЙМЕР ⚠️: данное техническое решение не рекомендуется к использованию ⛔️. Я не несу ответственность за баги в вашем проде и прожжённые бюджеты ваших проектов в случае попыток применить их в вашем продакшене

Вадим Алексеев
Человек хочет оптимизировать, проявить творчество,...

если серьезно, то “оптимизировать” то, что даже теоретически может дать максимум 0.1% прироста - это не “оптимизировать” называется, а “время просирать”

Daniel Podolsky
если серьезно, то “оптимизировать” то, что даже те...

Мне очень лень доставать свои старые кейсы где это дало 30%

Вадим Алексеев
Мне очень лень доставать свои старые кейсы где это...

да и не надо. такие кейсы могут быть вполне, хоть я и не сталкивался. но кейс Романа явно не из этих

Roman-Sharkov Автор вопроса
Daniel Podolsky
да и не надо. такие кейсы могут быть вполне, хоть ...

а как можно предполагать что мой кейс не из этих даже не зная моего кейса? 😅

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