io分發(fā)主要采用select實(shí)現(xiàn),偽代碼如下:
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());
????????}
????}
} 由于系統(tǒng)設(shè)計(jì)時(shí)是使用雙向請(qǐng)求呼響應(yīng)模型,socket總是可寫的,而并不是每個(gè)socket都有相應(yīng)數(shù)據(jù)可寫,感覺(jué)寫這一部分相應(yīng)低效和臟。