2011-10-28 11 views
6

Tôi đang viết máy chủ web cho thiết bị di động dựa trên Android trong java.Java/Android - Phân tích cú pháp ByteBuffer nhanh

Máy chủ web này là đơn luồng và làm theo ý tưởng đằng sau nginx, node.js và tương tự: không sinh ra nhiều luồng chỉ sử dụng hoạt động async trong vòng lặp sự kiện.

Trong khi sử dụng máy chủ web đa luồng có thể cung cấp hiệu suất tốt hơn trên CPU x86 gần đây, trên cpu lõi đơn dựa trên cánh tay sẽ cần thực hiện nhiều công việc hơn.

Để làm rõ, tôi biết khá rõ C và tôi đã triển khai máy chủ web đơn luồng trong đồng bằng c hoặc đa luồng trong C#, lợi dụng IOPS trên cửa sổ, nhưng tôi đã viết chỉ một máy chủ web đơn giản trong java, tôi muốn thay thế bằng cái mới này.

Ngay bây giờ, tôi đang sử dụng java nio và tôi đã đọc rằng ByteBuffer khá chậm khi chuyển đổi thành chuỗi nhưng đây không phải là vấn đề bởi vì tôi không cần phải làm, infact đến gaix maximium biểu diễn tôi muốn để triển khai phân tích cú pháp và so sánh ở cấp byte.

Câu hỏi của tôi là, phương pháp phân tích bộ đệm byte nào nhanh hơn?

Tôi đã thấy ByteBuffer hỗ trợ nhận phương thức, cho phép truy cập vào một byte đơn và di chuyển con trỏ, hỗ trợ phương thức mảng, trả về mảng sao lưu, vì vậy câu hỏi của tôi là phương thức nào nhanh hơn?

Tôi có thể làm việc trực tiếp trên mảng được sao lưu, hoặc tôi nên tránh và sử dụng?

Tôi muốn thực hiện một ByteBufferPool để sử dụng lại bytebuffer, tôi sẽ làm cho thread nhận thức được nó, đọc dưới đây, có thể là một vấn đề này?

Trong một số trường hợp, tôi sẽ so sánh byte thành byte, sử dụng mặt nạ để xử lý độ nhạy trường hợp (ý tôi là, nếu byte đầu tiên là G, thứ ba là T và thứ tư là khoảng trắng (0x47, 0x54 và 0x20) i có thể xử lý yêu cầu như là một GET) và trong các trường hợp khác, tôi sẽ cần phải so sánh các chuỗi với mảng byte, giống như cho tiêu đề (tôi sẽ lặp qua chuỗi ký tự, đúc chúng thành byte và so sánh với byte).

Xin lỗi vì những câu hỏi ngớ ngẩn, nhưng tôi không biết thông số kỹ thuật java và không biết công cụ java nội bộ, vì vậy tôi cần infos :)

Ai đó có thể đưa ra một gợi ý? :)

PS: obiviously, không phải tất cả hoạt động có thể được xử lý một cách làm-thứ-pause-tiếp tục-trở lại, vì vậy tôi sẽ thực hiện một ThreadPool để tránh chủ đề tạo hình phạt

Trả lời

1

Cho Netty một thử. Bạn có thể kiểm soát mô hình luồng và bạn có thể thực hiện những gì bạn cần.