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