Я пишу веб-сервер для мобильных устройств на базе Android в Java.
Этот веб-сервер является однопоточным и следует идее, лежащей в основе nginx, node.js и аналогичных: не создавайте несколько потоков, просто используйтеАсинхронные операции в цикле обработки событий.
Хотя использование многопоточного веб-сервера может повысить производительность на современных процессорах x86, одноядерному процессору на уровне рук потребуется выполнить гораздо больше работы.
Чтобы уточнить, я достаточно хорошо знаю C, и я реализовал однопоточные веб-серверы на простом c или многопоточные на C #, используя преимущества IOPS для Windows, но я написал только простой веб-сервер на Java, который я хочузамените его новым.
Сейчас я использую java nio и считал, что ByteBuffer работает довольно медленно при преобразовании в строку, но это не проблема, потому что мне не нужно делатьНа самом деле, я хочу реализовать синтаксический анализ и сравнение на уровне байтов.
Мой вопрос: какой метод анализа байтового буферабыстрее?
Я видел, что ByteBuffer поддерживает метод get, который дает доступ к одному байту и перемещает курсор вперед, поддерживает метод массива, который возвращает массив поддержки, поэтому мой вопрос в том, какой метод быстрее?
Я могу работать непосредственно с массивом с резервной копией, или мне следует избегать и использовать get?
Я хочу реализовать ByteBufferPool для повторного использования байтового буфера, я сделаю это с учетом потоков, читайте ниже,это может быть проблемой?
В некоторых случаях я буду сравнивать байт с байтом, применяя маску для обработки чувствительности к регистру (я имею в виду, если первый байт равен G, третий - T, а четвертый - пробел).(0x47, 0x54 и 0x20) я могу рассматривать запрос как запрос GET), а в других случаях мне нужно будет сравнивать строки с байтовым массивом, например, для заголовков (я буду перебирать строковые символы, приводить их к байтам и сравниватьв байты).
Извините за эти глупые вопросы, но я не знаю спецификаций Java и не знаю внутренних вещей Java, поэтому мне нужна информация:)
Кто-то может дать подсказку?:)
PS: очевидно, что не все операции могут быть обработаны способом do-stuff-pause-continue-return, поэтому я буду реализовывать ThreadPool, чтобы избежать штрафа за создание потока