Я работаю над проектом MMO game server, и у меня есть проблема. Это ограничение метода select(). Я хочу обрабатывать более 1024 сокетов ввода-вывода с одним потоком. Я хочу сделать это с помощью одного потока, потому что я попытался создать многопоточную систему обработки. Эта система создает 3 потока (например, в 4-ядерном процессоре, 1 является основным, 3 - обработчиком select()), который обрабатывает метод select(), но снова возникает другая проблема, теперь наш предел ушел в 3072 (1024 * 3) и это не решение! После этой идеи я хочу создать неблокирующую систему сокетов, с этой системой я назвал 2 разных метода select в одном отдельном потоке, как это; "select() select()". Они возвращаются в порядок, и я могу обращаться с ними в порядке. Но есть другая проблема, я думаю. Если я хочу реализовать поток, подобный методам while (true) {select() select()} "и select() (неблокирующим), я перегружаю CPU как пустой блок while (true). Если я хочу сделать тайм-аут select(), я не могу обработать нижний select() в реальном времени. Теперь я не могу сделать для этого алгоритм. Может ли кто-нибудь помочь мне в этом?Обработка более 1024 сокетов?
Примечание: Я не хочу использовать подушную Epoll-wsapoll и т.д. (опрос не может справиться микросекунд, это не быстро, как выбрать!) и Libevent как третьи сторонние библиотеки (я хочу чтобы сделать мой собственный!)
НАЧАЛЬНОЕ РЕШЕНИЕ (я думаю): Мне не нужно обрабатывать наносекунды для операции ввода-вывода, потому что нет смысла обрабатывать его. Опрос - это хороший способ обработки более чем 1024 сокетов. Я буду изучать что-то для понимания систем MMO. И последнее, что я сделаю некоторые тесты, и я попробую что-нибудь, прежде чем задать вопрос :) Спасибо!
EDIT: Я новый в этом Q & Платформа. Можете ли вы сказать мне, что не так с моим вопросом, после того, как я дал отрицательный отзыв? :)
«Я хочу, чтобы мой собственный!» FYI, epoll требует поддержки ядра. Вам нужно будет написать модуль ядра. IOW, просто используйте epoll. –
Кроме того, это, вероятно, вопрос XY. «из-за чего-то» рассказывают нам, что это такое, и, возможно, мы можем помочь решить эту проблему вместо этого, поскольку epoll - это действительно способ пойти. –
@rightfold no, я хочу использовать метод select(). Я добавил причины, по которым я не хочу использовать ~ опрос. – PiLaWYeR