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

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

условного типа Х которая будет предоставлена той горутиной, которая обрабатывает запрос?

при обработке каждого запроса создавать инстанцию невыгодно, создавать contention на shared инстанции тоже

22 ответов

10 просмотров

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

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

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

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

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

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

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

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

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

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

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

получается, что он находит одинаковое колво тегов, с разными именами, или я что тто не понял в таксоупе ?
Fedor
46
вот такое это из хаскеловской или никсовой ситуации ? пока мне сложно отличить, может кто понимает last 10 log lines: > Running phase: updateAutotoolsGnuConfig...
Fedor
18
не понимаю как в какую сторону искать проблему вот так выглядит Tag в выводе Filtered tag: <a>, href: /url?esrc=s&q=&rct=j&sa=U&url=https://ru.wikipedia.org/wiki/Haskell&ved=2...
Fedor
8
Снова я с выводом номера вхождения подстроки в строку. Исправил код, номер элемента, с которого начинается подстрока в строке, выводит, но неправильно. Подскажите, пожалуйста,...
Ыиу
2
@dt0W3s1yQE75Mew ну чё как чувствуешь себя здесь бот? запомни тупое ты чучело - в ассемблере нету тянок
.
18
а вот так если по инструкции выше Y % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total ...
Fedor
7
ого, прикольно, а что пишешь?
CodWiz | Серёжа by CodWiz
32
#include <stdio.h> base( int size_2, int size_1, int ar_1[], int ar_2[][size_2] ){ int cm,im; int ar_3[size_2]; for(int num = 0; num <size_2; num++ ) { ...
Behemoth cat
11
Вопрос, не ставиться haskus-utils-variant (>=3.3 && <3.4) - говорит битый пакет под никсом, есть у кого мысли как чинить ?
Fedor
16
а вот вопрос куда копать не понимаю, вроде работает функция, но возращает странное take 1 ategs [TagBranch "a" [("href","/?sa=X&ved=0ahUKEwiQ7Pbhzs6FAxURBNsEHVRuDAgQOwgC")] [...
Fedor
6
Карта сайта