2011-10-28 29 views
6

Estoy escribiendo un servidor web para dispositivos móviles con Android en java.Java/Android - Fast ByteBuffer Parsing

Este servidor web tiene un único subproceso y sigue la idea detrás de nginx, node.js y similares: no generar múltiples subprocesos, solo utilice operaciones asincrónicas en un bucle de evento.

Si bien el uso de un servidor web de subprocesos múltiples puede dar un mejor rendimiento en la CPU reciente de x86, la CPU de un solo núcleo basada en el brazo necesitará hacer mucho más trabajo.

Para aclarar, sé bastante bien C y he implementado servidores web de subproceso único en C simple o multiproceso en C#, aprovechando IOPS en Windows, pero he escrito solo un servidor web simple en Java, el quiero reemplazar con este nuevo

En este momento, estoy usando java nio y he leído que ByteBuffer es bastante lento cuando se convierte en una cadena, pero esto no es un problema porque no tengo que hacer, de hecho, para obtener máximas prestaciones quiero para implementar el análisis sintáctico y la comparación en el nivel de bytes.

Mi pregunta es, ¿qué método para analizar el buffer de bytes es más rápido?

He visto que ByteBuffer admite el método get, que da acceso a un solo byte y mueve el cursor, admite el método de matriz, que devuelve la matriz de respaldo, por lo que mi pregunta es ¿qué método es más rápido?

Puedo trabajar directamente en la matriz respaldada, o debo evitar y usar get?

Quiero implementar un ByteBufferPool para reutilizar bytebuffer, lo haré consciente de los hilos, lea a continuación, ¿puede ser esto un problema?

En algunos casos compararé byte a byte, aplicando una máscara para manejar la distinción entre mayúsculas y minúsculas (quiero decir, si el primer byte es G, el tercero es T y el cuarto es un espacio (0x47, 0x54 y 0x20) i puede tratar la solicitud como una GET) y en otros casos necesitaré comparar cadenas con una matriz de bytes, como para encabezados (recorreré caracteres de cadena, los convertiré a bytes y los compararé con bytes).

Lo siento por estas preguntas tontas, pero no sé especificaciones de java y no sé cosas java interna, por eso es necesario informaciones :)

Alguien puede dar una pista? :)

PS: obiviously, no toda la operación puede ser manejado de una manera do-cosas-pausa-seguir-retorno, así que va a implementar un ThreadPool para evitar la creación de rosca pena de

Respuesta

1

Dar Netty intentarlo. Puede controlar el modelo de subprocesamiento y puede implementar solo lo que necesita.