典型的一次I/O的两个阶段是什么?
数据准备 和 数据读写
我们作为服务器,接收客户端的请求,得先监听客户端有没有数据过来,这是一个状态,还有就是数据过来了该怎么去读写,这又是一个状态。
实际上,阻塞,非阻塞,同步,异步, 分别是这两种状态下的体系。
数据准备: 根据系统IO操作的就绪状态
阻塞 : 让调用I/O的线程进入阻塞状态 ,数据准备好了就唤醒
非阻塞: 不会改变线程的状态,通过返回值判断
sockfd相当于就是系统的文件描述符,代表1个I/O,创建的时候默认是阻塞;
当我调用1个阻塞I/O的话,如果sockfd上没有数据可读,这个recv不会返回,造成当前线程阻塞,等待sockfd上有数据到来(一直等着)。