Hashed and Hierarchical Timing Wheels: Data Structures for the Efficient Implementation of a Timer Facility