I wrote the following program:
package main
import (
\"fmt\"
)
func processevents(list chan func()) {
for {
//a := <-list
//a()
Good news, since Go 1.2 (december 2013) the original program now works as expected. You may try it on Playground.
This is explained in the Go 1.2 release notes, section "Pre-emption in the scheduler" :
In prior releases, a goroutine that was looping forever could starve out other goroutines on the same thread, a serious problem when GOMAXPROCS provided only one user thread. In Go 1.2, this is partially addressed: The scheduler is invoked occasionally upon entry to a function.