? Load vs "deleted" -> err or data=nil ?  -> stor.Conn flag
? IStorage.Load -> per storage connection

? random access -> mmap

- scheduler won't use free P if a G is taking time and other Gs are queued after it on the same P:
   https://groups.google.com/forum/#!topic/golang-nuts/8KYER1ALelg

e870f06c (runtime: yield time slice to most recently readied G)
ea0386f8 (runtime: improve randomized stealing logic)
4bb491b1 (runtime: improve scheduler fairness)
bc31bccc (runtime: preempt long-running goroutines)
179d41fe (runtime: tune P retake logic)
fb6f8a96 (runtime: remove unnecessary wakeups of worker threads)
/s steal
findrunnable
runqsteal
? runqgrab
schedule	<- top entry

-> stopm()	// stop and restart m after waiting for work
	notesleep(m.park)
	notewakeup

   startm()	(calls notewakeup(m.park)
 ? wakep()	(calls startm(nil, ...)
 ? startlockedm

https://golang.org/s/go11sched	-> syscall/M partking and Unparking/Spinning
runtime/HACKING.md

----------------------------------------

- TODO stats for events (packets received, errors, etc)

- custom memory manager is required to avoid performance hit on e.g. []byte alloc/dealloc

  -> go-slab

- interfaces conversion in hot codepaths are costly:

  e.g. having r as io.ReadSeeker and converting it to io.Reader e.g. this way:


	io.ReadFull(r, ...)

  calls convI2I all the time (no caching) which is not negliable



- x/net/trace to trace requests and connection logging (and packets ?)
- packet log; general log -> glog ?

  -> http://opentracing.io/

- gRPC eventually instead of hand-made protocol ?

go.leveldb      - study
go.groupcache   - study

groupcache -> consistenthash (-> fork-splitted)