How to do that in scheme? Basically, eliminate context switches. Implement context switches as jumps or calls. If the overhead is gone, a lot of buffering isn't needed, and the implementation probably comes closer to what can be done in hardware using dedicated machines. Try this! It's an important bit.