file descriptor“阻塞”读的实现，可以将fd或者socket绑定在一个用户执行函数上，在里面可以实现同步读，且在没有数据的时候不会导致整个线程的挂起，只会挂起用户自己的执行函数