io分发主要采用select实现,伪代码如下:
while(select())
{
for_each(sockets)
{
if(readble(socket))
{
handle_read(socket)
}
else if(writeable(socket))
{
if(responses.empty())
{
sleep(x)
continue;
}
handle_write(responses.pop());
}
}
} 由于系统设计时是使用双向請求呼响应模型,socket总是可写的,而并不是每个socket都有相应数据可写,感觉写这一部分相应低效和脏。