网络IO阶段1 数据就绪状态分为阻塞和非则阻塞
阻塞: 调用IO方法的线程进入阻塞状态;
非阻塞:不会改变线程的状态,通过返回值判断;
ssize_t recv(int sockfd,void *buf,size_t len,int flags);
int size=recv(sockfd,buf,1024,0);
size==-1,出错了(EINTR,EAGIN,EWOULDBLOCK)
size==0,读取到数据的末尾,对方连接关闭
size>0,读取到了多少数据
操作系统 TCP接收缓冲区
数据读写阶段分为同步和异步
同步:举个例子,比如你在网上买了一张飞机票,但是人家要立马让你过去取票,此时你就得立马打车过去取票,中间即使还有比这个更重要的事情你都不能干,只能专心去做取票这一件事,只有这件事办完之后才能去干其他的事情,因此他的效率就不会很高。
异步:同样还是取飞机票的例子,你从网上买了一张飞机票,出票后你给业务员打了个电话说你给我顺丰过来吧,那么业务员根据你提供的地址就把飞机票给你邮过去了,那么快递员在给你送快递的时候不影响你在干别的事情,因此异步的效率会比同步的效率高。
陈硕大神说:在处理IO的时候,阻塞和非阻塞都是同步IO,只有使用了特殊的API才是异步IO。
同步:阻塞和非阻塞
异步:对于Linux来说,API是AIO,对于Windows来说,API是IOCP。