ReactiveML
rml.lri.fr
rml.lri.fr
In that model, each 'thing' on the screen runs as a concurrent process, but it's written as a simple loop which blocks on reading from the input channels (mouse, keyboard events, etc.). This makes the behaviour of each element clearer to read, and possibly easier to compose. Compare that to the callback spaghetti of event driven systems like JS in browsers and you'll see a clear winner.