2009-05-15 43 views
7

Thuật toán tốt nhất để triển khai thư viện hẹn giờ đơn giản là gì. Thư viện nên cho phép như sau:Thuật toán hẹn giờ hiệu quả

  1. Timers được bắt đầu
  2. Timers để được dừng lại
  3. Timers để được kiểm tra cho dù họ vẫn đang chạy

On Hẹn giờ hết hạn một hàm callback sẽ gọi là.

Mô-đun hẹn giờ sẽ cho phép bộ hẹn giờ có độ phân giải thời gian của N và mô-đun sẽ được cung cấp một cú đá mỗi N để nhắc mô-đun kiểm tra các bộ hẹn giờ đã hết hạn.

Nhiều bộ hẹn giờ có thể hoạt động đồng thời.

Các thuật toán tốt nhất cần phải đáp ứng được các mục tiêu sau đây

  1. Hãy mạnh mẽ để tính giờ được bắt đầu/dừng lại khi xử lý một bộ đếm thời gian gọi lại hết
  2. phép tính giờ được bắt đầu, dừng lại và kiểm tra một cách nhanh chóng
  3. Có một bộ nhớ nhỏ dấu chân

Trân

+0

Giải pháp ngôn ngữ nên là gì? –

+0

Tôi quan tâm nhiều hơn đến thuật toán so với việc triển khai. Nếu nó giúp bạn biết tôi rất có thể sẽ thực hiện nó trong C. Kính trọng –

Trả lời

8

thuật toán tốt nhất mà tôi đã thấy cho giờ là một bánh xe hẹn giờ tìm thấy trong các tài liệu nghiên cứu Hashed and Hierarchical Timing Wheels: Data Structures for the Efficient Implementation of a Timer Facility

Tôi biết trong Java có một thực hiện với Netty, JBoss và tôi chắc chắn ở đâu đó quá mà bạn có thể sử dụng, nếu bạn đang viết bằng Java.

+1

Giấy tham chiếu thảo luận về các thuật toán hẹn giờ khác nhau và nơi chúng có thể được sử dụng một cách thích hợp. Nếu liên kết không thành công trong tương lai thì có thể hữu ích khi biết tiêu đề là "Bánh xe Hashing và Phân cấp thời gian: Cấu trúc dữ liệu để thực hiện hiệu quả Cơ sở hẹn giờ" –

+1

Trước khi đọc câu trả lời của bạn, tôi không biết về lớp NettyIO [ HashedWheelTimer] (http://netty.io/4.0/api/io/netty/util/HashedWheelTimer.html), nhưng việc triển khai sẽ xuất hiện tuyệt vời. Không có ý định chơi chữ: Đừng sáng tạo lại bánh xe! – kevinarpe

+1

Ngoài ra còn có triển khai C tại đây: http://www.25thandclement.com/~william/projects/timeout.c.html – starseeker

1

O Các hệ thống POSIX-ish, bạn có thể sử dụng các chức năng của timer_create/timer_settime để cung cấp rất nhiều điều này "miễn phí".

+1

Hi Kristopher, Tôi sẽ xem xét những điều này nhưng tôi quan tâm hơn đến thuật toán hơn là lấy một thư viện chứng khoán. Kính trọng –

2

Bộ định thời thường được triển khai tốt nhất trong hạt nhân hệ điều hành, ở cấp độ lắp ráp/C, sử dụng các tính năng dành riêng cho nền tảng như bộ hẹn giờ APIC bất cứ khi nào có thể.

Bạn có thể muốn xem http://lwn.net/Articles/167897/ để biết chi tiết về triển khai Linux và tìm hiểu mã nguồn Linux để xem triển khai thực hiện.

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