title: How to implement asynchronous reading in go?
body: <p>I study golang scheduler in linux. I think golang using multi-thread to implement goroutine , when some goroutine is blocked in I/O(just like reading a file), other thread go on processing another goroutine . But when there is lots of I/O,I don't think thread is enough,  how golang deal with it ? </p>
  
  <p>I read a article <a href="http://morsmachine.dk/netpoller" rel="nofollow">http://morsmachine.dk/netpoller</a> , it says  “Go gets around this problem by using the asynchronous interfaces that the OS provides, but blocking the goroutines that are performing I/O.” . 
  Is it  like the  aio_read ? It is said that there is lots of bugs with the asynchronous interfaces . And I don’t find it in the source code or I just miss it. </p>
  
  <p>As we know ,  I understand we can use epoll to do  asynchronous io for pipes and socket, but epoll can’t be used to reading or writing of regular file.  And nodejs  use libeio to do  this for  regular file. I want to know how golang do it in runtime. </p>