Tishka17
Я проглядел ссылку
koder
https://github.com/koder-ua/network_ping_test/blob/master/perf_report.md#%D1%81%D0%BE%D0%B2%D0%B5%D1%80%D1%88%D0%B0%D0%B5%D0%BC%D1%8B%D0%B5-%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%BD%D1%8B%D0%B5-%D0%B2%D1%8B%D0%B7%D0%BE%D0%B2%D1%8B вот кусок смотри - там есть расклады по системным вызовам с affiniti и без
koder
без афинити на каждый recv - 15 futex_wait
koder
там хитрая фигня выходит - в добавок ОС начинает елозить потоки по все доступным ядрам CPU равномерно
koder
мусорит кеши и прочее
Unat
Да можно ссылку на строчку кода кинуть, я открою :) а то ты там, кажется, диссертацию так скоро напишешь.
Tishka17
Размер данных
Floss
Необходимо собрать по дизайн-эскизам экранов весь функционал для магазина, на Django. Все стандартно: api для стыковки с фронтом, мультиязычность, мультивалюстность, фингерпринты, авторизация через соцсети, подбор товара, конструктор товара, оплата через платежный шлюз, чат. Для админки можно использовать шаблон аля jet. Фронт на angular уже готов. От вас нужен только бек на django. #работа #удаленка
koder
А где создаётся много асинков? Из шелла?
тааак. все корутины (они же асинки) живут в одном потоке OC. Но корутин у тебя столько же, сколько и потоков. А, я тебя понял. Если в тестируемой части начать делать дополнительные операции, а не только пинг-понг, то расклады будут чутка другими. Долго писать. Но в общем этот тест не про симуляцию реальной нагрузки - он про накладные расходы. Накладные разходы зависят только от количества соединений. Потоки проседяют быстрее остальных про этим. Если у тебя будет МНОГО медленных клиентов - то потоки будут смотреться хуже, чем если их мало. Но все равно лучше async по пропусной способности. Но так то у async есть другие проймузества
Tishka17
64B
Ээ
Tishka17
Черт дохуя мало
koder
я гонял и на 2к
Tishka17
Давай-ка 100к хотя бы
koder
А смысл?
Tishka17
Асинкио обещали быстрее за счёт экономии на чтении их буфера
koder
ты просто начнешь тратить время на tcp стек, а не на свой код
koder
я не понимаю как так может быть
Tishka17
Мол треды переключаются когда ты читаешь, а тут сразу
Tishka17
На маленьких размерах никто не обещал
Tishka17
И да, у тебя код с тредами не умеет дочитывать данных, остальные не с смотрел
Tishka17
ты просто начнешь тратить время на tcp стек, а не на свой код
Короче, проверь на сотне кило. Думаю результат будет другой
koder
ээээ, я не понял. Когда ты используешь асинк - ты делаешь сначала poll и получаешь список сокетов на которых есть данные. Дальше ты из этих сокетов точно так же, как и в потоковой системе, читаешь данные. Тем же самым recv
koder
Разницы ни в буферах ни в ос тут нет
Tishka17
Ну вот у тебя есть 100к данных. В асинке пока не прочитаешь не переключишься
Tishka17
А треде - можешь
koder
нет
Tishka17
Там именно эту часть тюнили
Tishka17
Проверь, иначе это все теория
koder
а кто мешает сделать в потоке recv(100000)
koder
так а что проверять то - я и так те скажу
koder
делаешь в потоке recv с большим размером буфера и читаешь все что есть
Tishka17
а кто мешает сделать в потоке recv(100000)
Никто не гарантирует что во время этого вызова не будет сотни переключений
koder
причем ровно одним запросом в ядро
koder
это один вызов ядра
Tishka17
Можно подумать питон именно так и сделает
koder
какие переключения?
koder
да
Tishka17
Короче, имхо твой тест не полностью корректный
koder
в смысле пруф? когда ты на сокете делаешь socket.recv(10000000) - вызов узодит в ядро с таким за размером требуемого буфера
koder
если там нет данных - ты блокируешься
koder
если дам есть хоть байт данных - ты получишь обратно все что есть
Tishka17
Не хочешь проверить поведение на большем объеме - твое дело. Но в реальности ради 50байт никто не будет такое писать, так что нагрузка у тебя нереальная
koder
запусти под strace и посмотри
Tishka17
Ну ок
Unat
Так никто не спорит с тем, что нагрузка не реальная
koder
сори, но хоть посмотри как работает ядро и питон с сокетами
Unat
Вот это я и пытаюсь понять
koder
накладные расходы разных систем на передачу блока данных
Tishka17
Ну а размер блока не важен, ага. Мы должны проверить
Tishka17
Зачем тогда тесты, если все принимаем на веру
Unat
Но тут вопрос - почему потоки множатся, а корутина одна
Tishka17
Зато на одно ядро пинили
koder
Ну а размер блока не важен, ага. Мы должны проверить
а от кокретных данных зависит скоротьс?
koder
может пробелы быстрее букв 'a' идут?
koder
может в субботу быстрее asyncio?
Unat
Да, или я не могу найти где множатся корутины
koder
некоторые из таких предположений не требуют проверки - я знаю и так ответ
koder
на 100к ты будешь насиловать tcp стек и ядро
Tishka17
некоторые из таких предположений не требуют проверки - я знаю и так ответ
Окей. Мое предположение - ты проверил ненужную хрень. Проверка не требуется
Tishka17
Следующий
Unat
Токсичное русское коммьюнити :(
Tishka17
О том как ведут себя разных подходы
koder
Да, или я не могу найти где множатся корутины
https://github.com/koder-ua/network_ping_test/blob/master/main.py#L174
koder
на каждый новый коннект ядро делает корутину
koder
Ну так об этом и речь
блин, да тсп стек у всех один и тот же
Tishka17
блин, да тсп стек у всех один и тот же
А логика планировщика при его использовании - разная
koder
ты просто увеличишь накладные расходы оси на пересылку данных по сети и уменьшишь rpc, в итоге накладные расходы твоей либы потерябтся на фоне времени передачи данных и различие уменьшится
koder
стека?
koder
какое отноешени к tcp стеку имеет планировщик задач?
koder
Да, или я не могу найти где множатся корутины
https://github.com/koder-ua/network_ping_test/blob/master/main.py#L131