2011-10-28 9 views
6

sto scrivendo un server web per dispositivi Android basati su dispositivi mobili in Java.Java/Android - Fast ByteBuffer Parsing

Questo server Web è a thread singolo e segue l'idea alla base di nginx, node.js e simili: non si generano più thread utilizzare solo operazioni asincrone in un ciclo di eventi.

Durante l'utilizzo di un server web multi-threaded può offrire prestazioni migliori su cpu x86 recente, sulla CPU single core basata su braccio sarà necessario fare un sacco di lavoro in più.

Per chiarire, so abbastanza bene C e ho implementato server Web a thread singolo in plain c o multithreaded in C#, sfruttando IOPS su Windows, ma ho scritto solo un semplice server web in java, l'unico Voglio sostituire con questo nuovo.

In questo momento, sto usando java nio e ho letto che ByteBuffer è piuttosto lento quando convertito in stringa, ma questo non è un problema perché non ho bisogno di farlo, infatti per prestazioni gimix maximium voglio implementare l'analisi e il confronto a livello di byte.

La mia domanda è, quale metodo per analizzare il buffer di byte è più veloce?

Ho visto che ByteBuffer supporta il metodo get, che dà accesso a un singolo byte e sposta il cursore in avanti, supporta il metodo array, che restituisce l'array di supporto, quindi la mia domanda è quale metodo è più veloce?

Posso lavorare direttamente su array backed, o dovrei evitare e usare get?

Voglio implementare un ByteBufferPool per riutilizzare bytebuffer, lo renderò thread-aware, leggi sotto, può essere questo un problema?

In alcuni casi confronterò byte per byte, applicando una maschera per gestire la distinzione tra maiuscole e minuscole (cioè, se il primo byte è G, il terzo è T e il quarto è uno spazio (0x47, 0x54 e 0x20) i può trollare la richiesta come GET) e in altri casi ho bisogno di confrontare le stringhe con l'array di byte, come per le intestazioni (collegherò i caratteri di stringa, li getterò in byte e li confronterò a byte).

Scusate per queste domande stupide, ma non so le specifiche Java e non so roba java interno, quindi ho bisogno di informazioni :)

Qualcuno può dare un suggerimento? :)

PS: obiviously, non tutte le operazioni possono essere gestite in un modo fai-roba-pausa-continua-ritorno, quindi mi implementare un ThreadPool per evitare filo pena di creazione

risposta

1

Dare Netty una prova. È possibile controllare il modello di threading ed è possibile implementare solo ciò di cui si ha bisogno.