В моем приложении существует io-thread, выделенный для
- Обтекание данных, полученных от приложения в пользовательском протоколе
- Отправка данных + пакет пользовательских протоколов через tcp/ip
- Получение данных + пакет пользовательского протокола через tcp/ip
- Развертывание пользовательского протокола и передача данных в приложение.
Приложение обрабатывает данные по другому потоку. Кроме того, требования диктуют, что размер неподтвержденного окна должен быть равен 1, то есть в любое время должно быть только одно ожидающее непризнанное сообщение. Это означает, что если io-thread отправил сообщение через сокет, он не отправит больше сообщений, пока не услышит ответ от получателя. Поток обработки приложений связывается с io-thread через трубу. Приложение должно быть изящно закрыто, если кто-то из CLI типов linux ctrl + C. Таким образом, учитывая эти требования, у меня есть следующие опции
- Использовать PPoll() для дескрипторов сокетов и труб
- Используйте Select()
- Использовать PSelect()
У меня есть следующие вопросы
-
Решение между select() и poll(). В моем приложении работает менее 50 дескрипторов файлов. Можно ли предположить, что не будет никакой разницы, выбираю ли я выбор или опрос?
-
Решение между select() и pselect(). Я прочитал документацию по Linux, и в нем говорится о состоянии гонки между сигналами и select(). У меня нет опыта с сигналами, так может кто-нибудь объяснить более четко о состоянии гонки и выбрать()? Это связано с тем, что кто-то нажал ctrl + C на CLI и приложение не остановилось?
-
Решение pselect и ppoll()? Любые мысли по одному против другого
-