2009-05-15 11 views
7

간단한 타이머 라이브러리를 구현하는 최상의 알고리즘은 무엇입니까? 그들은 여전히 ​​타이머에 효율적인 타이머 알고리즘

실행 여부 될 것 콜백 함수를 만료

  • 타이머를 시작하는
    1. 타이머

      중지 할
    2. 타이머 검사 할 : 도서관은 다음을 허용해야 라는.

      타이머 모듈은 타이머가 Ns의 시간 분해능을 가질 수있게하며, 모듈은 만료 된 타이머를 확인하기 위해 모듈에 모든 Ns를 제공해야합니다.

      많은 타이머가 동시에 활성화 될 수 있습니다.

      가장 좋은 알고리즘은

      1. 타이머가 시작되기 견고 다음과 같은 목표를 달성하기 위해 필요/
      2. 는 타이머를 시작할 수 있도록 허용 만료 콜백 타이머를 처리 정지 동안 정지하고 신속하게 가지고
      3. 을 확인 작은 메모리 풋 프린트

      안부

  • +0

    솔루션의 언어는 무엇입니까? –

    +0

    구현보다 알고리즘에 더 관심이 있습니다. 도움이된다면 C에서 구현할 가능성이 높습니다. 감사합니다. –

    답변

    8
    내가 타이머에 대한 본

    최상의 알고리즘이 인 Netty, 제이 보스와 구현이 내가 다른 곳도 사용할 수 있음을 확신 Hashed and Hierarchical Timing Wheels: Data Structures for the Efficient Implementation of a Timer Facility

    내가 자바로 알고있는 연구 논문에서 발견 된 타이머 휠, 당신의 경우 자바로 쓰고있다.

    +1

    이 문서는 다른 타이머 알고리즘과 해당 타이머 알고리즘이 어디에 사용되는지 설명합니다. 링크가 실패하면 제목이 "Hashed and Hierarchical Timing Wheels : Timer Facility의 효율적인 구현을위한 데이터 구조"임을 알아두면 도움이 될 것입니다 –

    +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 타이머와 같은 플랫폼 관련 기능을 사용합니다.

    리눅스 구현에 대한 자세한 내용은 http://lwn.net/Articles/167897/을보고 Linux 소스 코드를 통해 작동중인 구현을 확인하십시오.

    관련 문제