Я пытаюсь выяснить, что более результативно, сгенерировано по краю или с эллипсом уровня.
В основном я рассматриваю "исполнитель" как:
-
Возможность обработки нескольких соединений без деградации.
-
Возможность поддерживать максимальную скорость для входящего сообщения.
На самом деле меня больше волнует №2, но также важно №1.
Я выполнял тесты с одним поточным потребителем (принимать/читать несколько соединений сокетов с помощью epoll_wait
) и несколькими производителями.
До сих пор я не видел разницы, даже до 1000 дескрипторов файлов.
Я работаю над идеей (заблуждением?), что вызванное краем должно быть более результативным, потому что будет получено меньшее количество перехватов. Правильное ли это предположение?
Одна проблема с моим тестом, который может маскировать различия в производительности, заключается в том, что я не отправляю свои сообщения в потоки после их получения, так что чем меньше прерываний не имеет значения. Я не хотел делать этот тест, потому что я использовал __asm__ rdtsc
для получения "временных меток", поэтому не хочу, чтобы смириться с тем, из какого ядра появилась моя оригинальная временная метка.
То, что делает меня еще более подозрительным, - это то, что уровень срабатывания epoll лучше работает на некоторых тестах, которые я видел.
Что лучше? При каких обстоятельствах? Разве нет разницы? Любые идеи будут оценены.
EDIT:
Мои сокеты не блокируются.