Привет, подскажите с архитектурой сервера. Сейчас думаю сделать так: Запустить несколько тредов

( = колву ядер), в каждом треде слушать udp сокет (т.е. recvfrom). Сокет, конечно, един для всех тредов.
Другой вариант - слушать и отправлять все в одном треде, а сообщения распределять по воркерам.
Второй вариант выглядит сложнее, и непонятно, почему вообще его стоило бы использовать.
Неясно, где могут быть подводные камни в первом варианте - может я упускаю какие-то возможные задержки, создаваемые параллельными вызовами recvfrom или что-то в этом роде? Как быть?

12 ответов

20 просмотров

ось какая?

khokm- Автор вопроса
Stanislav Ershov
ось какая?

допустим, линупс

khokm- Автор вопроса
Stanislav Ershov
io_uring

а чем плох более простой уже описанный вариант?

khokm
а чем плох более простой уже описанный вариант?

для простого варианта сгодится, для high-perf не очень

делай как проще

у тебя как первый вариант вообще будет работать? ты же в каждом треде рандомный пакет будешь получать. если у тебя будет для remote ip какой-то контекст, то это и будет бутылочным горлышком. если контекст будет вычисляться по содержимому пакета, то второй вариант будет медленнее, т.к. распределитель будет этот контекст искать. вообще, ещё про первый вариант не очень понятно со стороны ОС поведение. есть ли в Линуксе гарантия, что ты не будешь, например, в один поток все пакеты получать?

khokm- Автор вопроса
GbaLog
у тебя как первый вариант вообще будет работать? т...

последние два параметра в recvfrom достают в отдельную структуру инфу об адресе откуда пришла датаграмма

GbaLog
у тебя как первый вариант вообще будет работать? т...

а что предлагаешь? с нескольких сокетов можно слушать один порт разве?

usernameak
а что предлагаешь? с нескольких сокетов можно слуш...

ну я второй вариант всегда использовал. даже больше скажу, работал с высоконагруженными системами, где нужно было 10 ГБ/сек. обрабатывать. там тоже был один поток читающий на интерфейсе, который распределял по потокам трафик.

Stanislav Ershov
io_uring

Как по мне, сыровато ещё для прода. Хотя технология интересная.

Stas
Как по мне, сыровато ещё для прода. Хотя технологи...

Да уже нет, больше 2 лет прошло. Во многих местах уже юзается

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

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

Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
5
А в каком формате фреймы? Сам формат сейчас придумываешь, или что-то готовое нужно распарсить?
Okhsunrog
5
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Карта сайта