use STM to access cache, now can split load on same machine too, only first thread reads for keys
updated todo
add profiling and use TVars to dequeue stdin