2010-10-28 28 views
6

Tôi đã xem xét cách thức các khung công tác xoắn và node.js hoạt động và tôi đang cố gắng hiểu chính xác cách hệ điều hành hỗ trợ các hoạt động I/O sử dụng gọi lại.Lập trình hướng sự kiện được triển khai như thế nào?

Tôi hiểu điều này là tốt vì chúng tôi cần ít chủ đề hơn vì chúng tôi không cần phải có chủ đề bị chặn đang chờ các hoạt động I/O. Nhưng một cái gì đó phải gọi lại cuộc gọi khi I/O kết thúc.

Hệ điều hành này được triển khai như thế nào?

Trả lời

5

Một cách tiếp cận là phải có hệ điều hành đính kèm thông tin về bất cứ ai chờ đợi một callback để cấu trúc dữ liệu có liên quan, chẳng hạn như phần tử tương đương với hạt nhân của bộ mô tả tệp bạn đang chờ đọc thông báo. Khi một cái gì đó xảy ra với bộ mô tả tập tin đó, hệ điều hành sẽ quét các nhân viên phục vụ để xem có cần thông báo hay không. Nếu họ nên, sau đó nó làm như vậy. Bạn có thể đọc về một triển khai thực hiện điều này trong Lemon's paper introducing FreeBSD's kqueue mechanism. Xem trong phần 6 cụ thể, "Triển khai", các phần phụ 3 và 4, "Hoạt động trên Nguồn sự kiện" và "Phân phối".

3

Điều này được giải quyết trong hệ điều hành bằng cách sử dụng "cơ sở/giao diện thông báo sự kiện I/O", ví dụ: epoll, cuộc thăm dò ý kiến, kqueue hoặc chọn.

Hãy xem deft và đặc biệt là 'io/event loop để biết ví dụ cụ thể về cách sử dụng "hệ thống thông báo" được đề cập ở trên. (java.nio.channels.Selector là cách nio java để cung cấp một sự trừu tượng cho việc này.)

từ chối trách nhiệm: im một committer khéo léo

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