1 同步阻塞IO
用户线程通过系统调用read发起IO读操作,由用户空间转到内核空间。内核等到数据包到达后,然后将接收的数据拷贝到用户空间,完成read操作。
用户线程使用同步阻塞IO模型的伪代码描述为:
{
read(socket, buffer);
process(buffer);
}
2同步非阻塞IO
用户线程系统系统调用read 后直接返回,然后通过不断轮训的方式,判断是否内核是否已经操作完成,如果完成继续操作
3 多路复用IO
引入selector ,selector 能够一个线程处理多个socket连接,但是还需要用户线程去读取数据
{
select(socket);
while(1) {
sockets = select();
for(socket in sockets) {
if(can_read(socket)) {
read(socket, buffer);
process(buffer);
}
}
}
}
4异步非阻塞
注册socket后,接收到读事件后直接去指定位置读取就可以了