Я пишу веб-сервер для мобильных устройств на базе Android на java.
Этот веб-сервер является однопоточным и следует идее, лежащей в основе nginx, node.js и подобных: не создавайте несколько потоков, просто используйте асинхронные операции в цикле событий.
В то время как использование многопоточного веб-сервера может дать лучшую производительность на последних процессорах x86, одноядерный процессор на базе ARM должен выполнять гораздо больше работы.
Чтобы уточнить, я достаточно хорошо знаю C, и я реализовал однопоточные веб-серверы на простом C или многопоточные на C #, используя преимущества IOPS в Windows, но я написал только простой веб-сервер на java, тот, который я хочу заменить на этот новый.
Прямо сейчас я использую java nio и читал, что ByteBuffer довольно медленен при преобразовании в строку, но это не проблема, потому что мне не нужно этого делать, фактически для производительности gaix maximium я хочу реализовать синтаксический анализ и сравнение на уровне байтов.
У меня вопрос, какой метод анализа байтового буфера быстрее?
Я видел, что ByteBuffer поддерживает метод get, который дает доступ к одному байту и перемещает курсор вперед, поддерживает метод массива, который возвращает поддержку array, поэтому мой вопрос в том, какой метод быстрее?
Я могу работать непосредственно с резервным массивом, или мне следует избегать и использовать get?
Я хочу реализовать ByteBufferPool для повторного использования bytebuffer, я сделаю потоки-ориентированные это, читайте ниже, может быть это проблема?
В некоторых случаях я буду сравнивать байт с байтом, применяя маску для обработки чувствительности к регистру (я имею в виду, что если первый байт - G, третий - T, а четвертый - пробел (0x47, 0x54 и 0x20), я могу рассматривать запрос как GET), а в других случаях мне нужно будет сравнить строки с байтовым массивом, например, для заголовков (я буду перебирать строковые символы, преобразовывать их в байты и сравните с байтами).
Извините за эти глупые вопросы, но я не знаю спецификаций java и не знаю внутренних компонентов Java, поэтому мне нужна информация :)
Кто-нибудь может дать подсказку? :)
PS: очевидно, что не все операции могут быть обработаны методом «сделай-паузу-продолжай-возвращайся», поэтому я реализую ThreadPool, чтобы избежать штрафа за создание потока