2009-05-15 16 views
7

Was ist der beste Algorithmus, um eine einfache Timer-Bibliothek zu implementieren. Die Bibliothek sollte es ermöglichen, die folgenden:Effiziente Timer-Algorithmus

  1. Timer
  2. Timer gestartet werden, gestoppt werden
  3. Timer überprüft werden, ob sie noch
  4. laufen

On Timer eine Rückruffunktion Ablauf wird namens.

Das Timer-Modul ermöglicht Timern eine Zeitauflösung von Ns, und das Modul erhält alle Ns einen Kick, um das Modul auf abgelaufene Timer zu überprüfen.

Viele Timer können gleichzeitig aktiv sein.

Der beste Algorithmus werden die folgenden Ziele

  1. robust sein, um Timer gestartet wird/gestoppt, während die Verarbeitung eines Timer Ablauf Rückruf
  2. zulassen Timer gestartet gerecht zu werden braucht, gestoppt und überprüft schnell
  3. haben ein geringer Speicherbedarf

Grüße

+0

In welcher Sprache sollte die Lösung sein? –

+0

Ich interessiere mich mehr für den Algorithmus als für die Implementierung. Wenn es Ihnen hilft zu wissen, würde ich es wahrscheinlich in C implementieren. Mit freundlichen Grüßen –

Antwort

8

bester Algorithmus I für Timer gesehen habe, ist ein Timer-Rad in der Forschung Papier gefunden Hashed and Hierarchical Timing Wheels: Data Structures for the Efficient Implementation of a Timer Facility

ich in Java weiß, dass es eine Implementierung mit Netty, JBoss ist, und ich bin sicher, dass auch anderswo, die Sie verwenden können, wenn Sie, schreiben in Java.

+1

Der referierte Artikel diskutiert verschiedene Timer-Algorithmen und wo sie angemessen verwendet werden können. Sollte die Verbindung in der Zukunft fehlschlagen, kann es hilfreich sein zu wissen, dass der Titel "Hashed und Hierarchical Timing Wheels: Datenstrukturen für die effiziente Implementierung einer Timer Facility" –

+1

Bevor ich Ihre Antwort gelesen habe, war mir die NettyIO Klasse nicht bekannt [ HashedWheelTimer] (http://netty.io/4.0/api/io/netty/util/HashedWheelTimer.html), aber die Implementierung scheint hervorragend zu sein. Kein Wortspiel beabsichtigt: Erfinde das Rad nicht neu! – kevinarpe

+1

Es gibt auch eine C-Implementierung hier: http://www.25thandclement.com/~william/projects/timeout.c.html – starseeker

1

O In POSIX-ish-Systemen können Sie mit der Funktionsfamilie timer_create/timer_settime viel davon "kostenlos" zur Verfügung stellen.

+1

Hallo Kristopher, Ich sehe mir diese an, aber ich interessiere mich mehr für den Algorithmus als eine Bibliothek zu nehmen. Grüße –

2

Timer werden normalerweise am besten in einem Betriebssystemkernel auf Assembly-/C-Ebene implementiert, wobei plattformspezifische Funktionen wie APIC-Timer wann immer möglich genutzt werden.

Weitere Informationen zur Linux-Implementierung finden Sie unter http://lwn.net/Articles/167897/. Sie können auch den Linux-Quellcode durchsuchen, um die funktionierenden Implementierungen zu sehen.