2009-05-15 35 views
7

単純なタイマーライブラリを実装する最良のアルゴリズムとは何ですか?なります効率的なタイマーアルゴリズム

  1. タイマー
  2. タイマーが、彼らはまだ、コールバック関数を有効期限タイマーに

を実行しているかどうかをチェックするために停止する

  • タイマーを起動する:ライブラリには、次のように許可する必要がありますと呼ばれる。

    タイマーモジュールではタイマーの時間分解能はNsになり、モジュールにはNsごとにキックが与えられ、満了したタイマーをチェックするようモジュールに促されます。

    多くのタイマーが同時にアクティブになることがあります。

    最良のアルゴリズムは

    1. タイマーが開始されることに堅牢で、次の目標を達成するために必要/
    2. は、タイマーを開始する許可の有効期限コールバックタイマーを処理して、停止している間に停止し、すぐに持って
    3. をチェックします小さなメモリフットプリント

    よろしく

  • +0

    ソリューションはどの言語ですか? –

    +0

    私は実装よりもアルゴリズムにもっと興味があります。それがC言語で実装する可能性が高いことを知るのに役立ちます。 よろしくお願いします。 –

    答えて

    8
    私はタイマーのために見ている

    ベストアルゴリズムはそこネッティーは、JBossと実装があると私は他の場所でもあなたが使用できることを確信しているHashed and Hierarchical Timing Wheels: Data Structures for the Efficient Implementation of a Timer Facility

    は、私はJavaで知っている研究論文で見つかったタイマーホイールで、あなたの場合Javaで書いています。

    +1

    参照されている論文では、さまざまなタイマーアルゴリズムと、それらを適切に使用できる場所について説明しています。将来リンクが失敗すると、タイトルが「ハッシュおよび階層的タイミングホイール:タイマー機能の効率的な実装のためのデータ構造」であることがわかります –

    +1

    答えを読む前に、私はNettyIOクラスを認識しませんでした[ HashedWheelTimer](http://netty.io/4.0/api/io/netty/util/HashedWheelTimer.html)、実装は優れているようです。馬鹿を意図していない:車輪を改造しないでください! – kevinarpe

    +1

    Cの実装もあります:http://www.25thandclement.com/~william/projects/timeout.c.html – starseeker

    1

    O n POSIX-ishシステムでは、timer_create/timer_settimeファミリーの関数を使用して、これを「無料で」提供することができます。

    +1

    こんにちはKristopher、 私はこれらを見ていきますが、在庫ライブラリを取るよりアルゴリズムにもっと興味があります。 Regards –

    2

    タイマーは通常、オペレーティングシステムのカーネルでアセンブリ/ Cレベルで実装するのが最善です。可能であれば、APICタイマーなどのプラットフォーム固有の機能を使用します。

    Linuxの実装の詳細については、http://lwn.net/Articles/167897/を参照してください。また、Linuxのソースコードを掘り下げて実装を確認することもできます。