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