дескрипторов соединений? Там может прилететь, например, миллион. Наиболее быстрый способ доступа к ним всёж линейный массив, кгм...
Да mmap-ал сразу один массив под всех доступных в системе, освобождением не заморачивался
Да ну там на это есть и другие причины
Структура данных по типу таблицы, т.е. массив блоков, или нечто похожее на unrolled linked list. Так в eventcore кстати тоже сделано. Получается что к дескриптору можно обратиться напрямую по его же значению
Вот пример https://github.com/jacob1237/unio/blob/main/source/unio/primitives/table.d
спасибо большое, я посмотрю эту реализацию. Пока я пробовал malloc-овый обычный линейный массив дескрипторов, где просто start + fd * fd.sizeof без деаллокаций. Грубая реализация лупа немного превосходит по перфу хелловордный h2o, но учитывая, что во втором полноценный фреймворк, а у меня голый луп, то это незначительный отрыв вызывает много вопросов... Где-то 90% у меня недоделано и недооптимизировано. С другой стороны, там мб и сложно уже выжимать перф т.к. эти наносекунды туда-сюда на общую картину могут влиять мало, особенно когда натянется замедляющая логика навроде парсинга запроса, передачи в плагины, событийная система и т.д. и т.п. Но посмотрим... пока в процессе тестирования.
Обсуждают сегодня