2011-10-28 20 views
6

Piszę serwer internetowy na urządzenia mobilne z Androidem w Javie.Java/Android - Szybka analiza ByteBuffer

Ten serwer sieciowy jest jednowątkowy i działa zgodnie z ideą nginx, node.js i podobnych: nie spawnuj wielu wątków, wystarczy użyć operacji asynchronicznych w pętli zdarzeń.

Podczas korzystania z wielowątkowego serwera WWW może dać lepszą wydajność na najnowszym procesorze x86, na jednordzeniowym procesorze x86 opartym na ramieniu będzie trzeba wykonać znacznie więcej pracy.

W celu wyjaśnienia, wiem całkiem dobrze C i mam zaimplementowano jednorzędowe serwery WWW w prostym c lub wielowątkowym w C#, korzystając z IOPS w oknach, ale napisałem tylko prosty serwer WWW w Javie, ten Chcę zastąpić tą nową.

W tej chwili używam java nio i przeczytałem, że ByteBuffer są dość powolne po konwersji na ciąg, ale to nie jest problem, ponieważ nie muszę robić, w rzeczywistości, aby wykonać występy maxix, chcę zaimplementować parsowanie i porównywanie na poziomie bajtów.

Moje pytanie brzmi, która metoda analizy bufora bajtów jest szybsza?

Widziałem, że ByteBuffer obsługuje metodę get, która daje dostęp do pojedynczego bajtu i przesuwa kursor, wspiera metodę tablicy, która zwraca tablicę backingową, więc moje pytanie brzmi, która metoda jest szybsza?

Mogę pracować bezpośrednio na macierzy dyskowej, lub powinienem unikać i używać get?

Chcę zaimplementować ByteBufferPool do ponownego użycia Beta-Bufera, sprawię, że zapozna się z wątkiem, przeczytaj poniżej. Czy to może być problem?

W niektórych przypadkach porównuję bajt z bajtem, używając maski do obsługi rozróżniania wielkości liter (tzn. Jeśli pierwszy bajt to G, trzeci to T, a czwarty to spacja (0x47, 0x54 i 0x20) i może potraktować żądanie jako GET), aw innych przypadkach będę musiał porównać łańcuchy z tablicą bajtową, jak w przypadku nagłówków (będę pętli przez ciąg znaków, rzutować je na bajty i porównać do bajtów).

Niestety dla tych głupich pytań, ale nie wiem, specyfikacje java i nie wiem wewnętrzną rzeczy Java, więc trzeba infos :)

Ktoś może dać wskazówkę? :)

PS: obiviously nie wszystkie operacja może być obsługiwane w sposób do-rzeczy-pauza-nadal-zwrotnym, więc będę realizować puli wątków, aby uniknąć gwint Kara za utworzenie

Odpowiedz

1

Daj Netty spróbować. Możesz kontrolować model gwintowania i możesz zaimplementować to, czego potrzebujesz.