NanoThreads allows the programmer to simulate concurrent processing using generators as tasks, which are registered with a scheduler.
While the scheduler is running, a NanoThread can be: - paused - resumed - ended (terminate and call all registered exit functions) - killed (terminate and do not call any registered exit functions) - preempted to the top of the execution queue
New in v11:
A NanoThread task can now yield control using 'yield nanothreads.UNBLOCK', which performs the next iteration of the task in a separate, OS level thread. This allows the scheduler to keep running other tasks, while the nanothread is, for example, performing CPU blocking IO, or calling some time consuming function.