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

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

12 ответов

7 просмотров

ось какая?

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 лет прошло. Во многих местах уже юзается

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

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

это группа токсиков или тех кто помогает?
Ибрагим
9
всем привет. подскажите. сделал политику, он верхнеуровневая. раздал права только на TEST2 (полные). вопрос - можно ли сделать так, чтобы был доступен только TEST2, а остально...
Андрей Сергеев
5
Гайз, кто-нибудь пробовал запустить probe-rs под камень, которого нет в probe-rs? Мб есть какой-нибудь пример у кого... Через target-gen попробовал сгенерировать chip-descript...
Максим Смирнов
2
Кстати, раз про скачивание файлов разговор зашел) Сделал бота для себя (транскрибирующего и суммаризирующего встречи) но не ожидал что за 2 месяца 10к пользователей набежит😅...
Andrey Obolenskiy
8
t.me/<username> и tg://user?id=<id> отваливаются по понятным причинам
Denis 🐍|👑 | darling! 🥰
7
А если без шуток, на чем десктоп сейчас пишут кроссплатформенный (ну чтобы с минимальным допиливанием под каждую платформу) и чтобы хорошая производительность софта была. Толь...
🐈
9
👋🏻3дpaвcтвуйтe 👋🏻 Ищeм 3aинтepecoвaнныx в дoxoде  в cфepe cryрtо!!📈 Oбучeниe Бecплaтнoe!💻 Peзультaт ужe в пepвый дeнь oбучeния!! Moжнo удeлять 1-2 чaca в дeнь!! 3aинтepecoвa...
Руслан Ал
3
зачем же переименовывать ? чтобы кол-во участников возросло или вдруг IBM от этого снова на свифте начнет кодить ? Я не понимаю что страшного в том что свифт гавно, если это т...
Oleh Nerzh
10
Добрый день! Подскажите, пожалуйста: какими компетенциями нужно обладать, чтобы претендовать на работу эрланг (отдельная благодарность, если про элексир тоже подскажете) разр...
via ☸️ led
20
👋🏻3дpaвcтвуйтe 👋🏻 Ищeм 3aинтepecoвaнныx в дoxoде в cфepe cryрtо!!📈 Oбучeниe Бecплaтнoe!💻 Peзультaт ужe в пepвый дeнь oбучeния!! Moжнo удeлять 1-2 чaca в дeнь!! 3aинтepecoвa...
Рустам Вв
4
Карта сайта