How would you write efficient interrupt service routines that do not block the main execution thread?