Skip to content

Instantly share code, notes, and snippets.

@ELLIOTTCABLE
Created April 30, 2010 21:04
Show Gist options
  • Save ELLIOTTCABLE/385755 to your computer and use it in GitHub Desktop.
Save ELLIOTTCABLE/385755 to your computer and use it in GitHub Desktop.
An interpreter instance is running in a thread, executing the statements in a
routine.
When the need arises to run another routine, and that routine is marked as
synchronous (rare), then it will immediately be run in the same thread,
blocking (stopping) execution of the original routine until the child routine
completely completes execution. The same thing happens if the parent routine
specifically blocks against the result of the child routine (i.e. in the case
of the sync abstraction being at play.)
If the child routine is instead marked always-asynchronous, a separate
interpreter instance from the pool (possibly a new one being created… I’m not
sure how to decide when new instances are necessary) will instead be asked to
execute it.
If the routine being called is not specified, and the routine is not blocked
against, then it acts as a normal, asynchronous routine. It may be run in the
same thread, blocking execution of the calling routine, or it may be given to
a separate interpreter instance (I’m not sure how to decide between the two…)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment