Java / Android - Fast ByteBuffer Parsing

Я пишу веб-сервер для мобильных устройств на базе 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, чтобы избежать штрафа за создание потока

7
задан Jonas 27 January 2012 в 02:47
поделиться