2012-02-17 18 views
11

Bực bội, trang web của HawtDispatch mô tả nó là "chuỗi tổng hợp luồng và API khung thông báo sự kiện NIO".HawtDispatch khác với Trình xử lý Java như thế nào? (và netty)

Trước hết hãy bắt đầu phần 'tạo nhóm'. Hầu hết các Executors được cung cấp bởi Java cũng là các pool thread cơ bản. HawtDispatch khác nhau như thế nào?

Nó cũng rõ ràng là "API khung thông báo sự kiện NIO". Tôi giả sử nó là một lớp mỏng trên NIO hàng đầu có dữ liệu đến và chuyển đến khái niệm 'thread pool', và chuyển nó cho người tiêu dùng khi bộ lập lịch pool thread tìm thấy thời gian. Chính xác? (Bất kỳ cải tiến nào trên NIO đều được hoan nghênh). Có ai thực hiện bất kỳ phân tích hiệu suất của netty vs HD?

Trả lời

17

HawtDispatch được thiết kế để là một hệ thống đơn lẻ có kích thước cố định rộng. Nó cung cấp dụng cụ 2 hương vị của Java Chấp hành viên:

  • văn Queue toàn cầu: đối tượng Runnable Submitted được thực hiện đồng thời (Bạn nhận được tác dụng tương tự sử dụng một chấp hành viên Executors.newFixedThreadPool(n))
  • nối tiếp văn Queue: đối tượng Runnable Submitted được thực hiện nối tiếp (Bạn nhận được hiệu ứng tương tự bằng cách sử dụng một người thực hiện Executors.newSingleThreadExecutor())

Không giống như mô hình thực thi java tất cả hàng đợi công văn toàn cầu và chia sẻ một hồ sơ kích thước cố định duy nhất. Bạn có thể sử dụng hàng nghìn hàng đợi công văn nối tiếp mà không cần tăng số lượng chuỗi của bạn. Hàng đợi công văn nối tiếp có thể được sử dụng như hộp thư Erlang để thúc đẩy các ứng dụng kiểu diễn viên phản ứng.

Vì HawtDispatch đang sử dụng một hồ bơi có kích thước cố định để xử lý tất cả các lệnh thực thi hàng đợi toàn cầu và nối tiếp, tất cả các nhiệm vụ Runnable mà nó thực thi phải không bị chặn. Theo cách này, nó tương tự như kiến ​​trúc NodeJS, ngoại trừ nó sử dụng nhiều luồng thay vì chỉ một.

So với Netty, HawtDispatch không phải là khuôn khổ để xử lý dữ liệu ổ cắm thực sự. Nó không cung cấp một khuôn khổ cho cách mã hóa/giải mã, đệm và xử lý dữ liệu socket. Tất cả những gì nó làm là thực thi một người dùng được cấu hình Runnable khi dữ liệu có thể được đọc hoặc ghi trên ổ cắm không chặn. Đó là vào bạn ứng dụng sau đó để thực sự đọc/ghi dữ liệu socket.

+3

Cảm ơn @Hiram. Tôi hy vọng bạn mở rộng tài liệu HawtDispatch một chút để giới thiệu cho những người không biết gì về libdispatch của Apple. Thành thật mà nói, mô tả này là một khởi đầu tốt. Có lẽ một cái gì đó mà mở rộng trên những lợi ích của HD hơn chỉ bằng cách sử dụng Executors. – Shahbaz

+0

@Shahbaz GCD có đặc quyền * điều chỉnh * kích thước của hồ bơi tùy thuộc vào số lượng lõi CPU có sẵn và mức độ bận của chúng hiện tại. Tôi đã nhìn thấy nó tăng số lượng thread khi nhiều công việc trong hàng đợi là I/O bị ràng buộc, do đó giữ CPU bận rộn. Tuy nhiên HawtDispatch dường như không làm điều đó. – adib

Các vấn đề liên quan