Difference between revisions of "Asynchronous Events and Handlers"

From Suhrid.net Wiki
Jump to navigationJump to search
 
(5 intermediate revisions by the same user not shown)
Line 12: Line 12:
 
* Alternative is Event based programming.
 
* Alternative is Event based programming.
 
* Each event has an associated handler, events are queued and their associated handler is executed.  
 
* Each event has an associated handler, events are queued and their associated handler is executed.  
* No need for communication among handlers as they can read/write from shared objects. [TODO]
+
* No need for communication among handlers as they can read/write from shared objects.  
 
* Disadvantage:
 
* Disadvantage:
 
** Difficult to have tight DL's as long lived and non blocking handler must finish before a high priority handler can be executed.
 
** Difficult to have tight DL's as long lived and non blocking handler must finish before a high priority handler can be executed.
** Difficult to execute handlers on a multiprocessor system as handlers assume no contention for shared resources. [TODO]
+
** Difficult to execute handlers on a multiprocessor system as handlers assume no contention for shared resources. Since handlers cannot execute simultaneously like threads.
  
 
= RTSJ Approach =
 
= RTSJ Approach =
  
 
* Provides real time Asynchronous Events (AE's) and associated handlers (AEH).
 
* Provides real time Asynchronous Events (AE's) and associated handlers (AEH).
* AE's are data less and are fired by the program or associated with occurrence of interrupts in the environment.
+
* AE's are data less happening and are fired by the program or associated with occurrence of interrupts in the environment.
 
* Association betwen AE's and AEH's is dynamic. 1 AE can have many AEH. 1 AEH can be for many AEs.
 
* Association betwen AE's and AEH's is dynamic. 1 AE can have many AEH. 1 AEH can be for many AEs.
 
* Each AEH has a count of fired events, When an event is fired, counter is '''atomically''' incremented.  
 
* Each AEH has a count of fired events, When an event is fired, counter is '''atomically''' incremented.  
 +
* The fireCount field holds the number of times associated instances of AsyncEvent have occurred that have '''not''' had the method handleAsyncEvent() invoked.
 
* The handler is then '''released.'''
 
* The handler is then '''released.'''
  
Line 79: Line 80:
 
* This has some overhead, so time critical AEH's can bind themself to a dedicated real time thread.  
 
* This has some overhead, so time critical AEH's can bind themself to a dedicated real time thread.  
 
* This is done by using a BoundAsyncEventHandler object which is a subclass of AsyncEventHandler.
 
* This is done by using a BoundAsyncEventHandler object which is a subclass of AsyncEventHandler.
 +
 +
== Timers ==
 +
 +
* Timers are AsyncEvents which allows us to generate timer events.
 +
* The timer class is abstract, two concrete classes OneShotTimer and PeriodicTimer exist.
 +
* Timer is flexible, it can be enabled, disabled, rescheduled.
  
 
[[Category:RealtimeJava]]
 
[[Category:RealtimeJava]]

Latest revision as of 11:42, 10 January 2012

Intro

  • Interaction between real world object and their controllers can be time triggered or event triggered.
  • In a time triggered system controller activates periodically to check status of object.
  • In an event triggered system sensors are activated when the real world object enters certain states.
  • Events are signaled via interrupts.
  • Event triggered systems are more flexible.
  • Time triggered systems are more predictable.
  • Threads are not considered appropriate as controllers when:
    • external objects are many and their control algos are simple & non blocking. This leads to a proliferation of threads.
    • external objects are inter related and their control requires complex synchronization between the controllers. Complex commn protocols are difficult to design and may lead to deadlocks and blocking.
  • Alternative is Event based programming.
  • Each event has an associated handler, events are queued and their associated handler is executed.
  • No need for communication among handlers as they can read/write from shared objects.
  • Disadvantage:
    • Difficult to have tight DL's as long lived and non blocking handler must finish before a high priority handler can be executed.
    • Difficult to execute handlers on a multiprocessor system as handlers assume no contention for shared resources. Since handlers cannot execute simultaneously like threads.

RTSJ Approach

  • Provides real time Asynchronous Events (AE's) and associated handlers (AEH).
  • AE's are data less happening and are fired by the program or associated with occurrence of interrupts in the environment.
  • Association betwen AE's and AEH's is dynamic. 1 AE can have many AEH. 1 AEH can be for many AEs.
  • Each AEH has a count of fired events, When an event is fired, counter is atomically incremented.
  • The fireCount field holds the number of times associated instances of AsyncEvent have occurred that have not had the method handleAsyncEvent() invoked.
  • The handler is then released.
  • ASEH has set of methods that allow to manipulate the fire count.
  • The handler code is in handleAsyncEvent() unless a Runnable object is supplied to the AEH constructor.
  • ASEH itself has a run() method which is called by system when AE is fired. So run() internally calls handleAsyncEvent() repeatedly whenever fireCount > 0.
  • Example:
  • NOTE: ASEH by default runs in daemon mode. So the program terminates when main terminates. To avoid this it must be made non daemon.
class MyAEH extends AsyncEventHandler {
	
	public MyAEH(SchedulingParameters scheduling, ReleaseParameters release,
			MemoryParameters memory, MemoryArea area,
			ProcessingGroupParameters group, boolean nonheap) {
		super(scheduling, release, memory, area, group, nonheap);
	}

	public void handleAsyncEvent() {
		try {
			Thread.sleep(3000);
		} catch (InterruptedException e) {
		}
		System.out.println("Handled an event. Pending fire count : " + getPendingFireCount());
	}
}

public class AEH1 {

	public static void main(String[] args) throws InterruptedException {
		
		AsyncEventHandler myAeh = new MyAEH(new PriorityParameters(25), new PeriodicParameters(new RelativeTime(5000,0)), null, null, null, false);
		myAeh.setDaemon(false);
		
		AsyncEvent ev = new AsyncEvent();
		
		ev.addHandler(myAeh);
		
		Thread.sleep(1000);
		System.out.println("Firing 1");
		
		ev.fire();
		Thread.sleep(500);
		System.out.println("Firing 2");
		ev.fire();
	}
}
  • Both RT Thread's and AEH's are Schedulable objects.
  • In practice, RTT's are vehicles for AEH's.
  • An AEH is bound to a server RT Thread - this is done dynamically.
  • This has some overhead, so time critical AEH's can bind themself to a dedicated real time thread.
  • This is done by using a BoundAsyncEventHandler object which is a subclass of AsyncEventHandler.

Timers

  • Timers are AsyncEvents which allows us to generate timer events.
  • The timer class is abstract, two concrete classes OneShotTimer and PeriodicTimer exist.
  • Timer is flexible, it can be enabled, disabled, rescheduled.