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都有相應數據可寫,感覺寫這一部分相應低效和臟。