bugfix: works if runnable is empty and unrunnable has some tasks
bugfix: Socket.read() works if input is empty
more complicated example