当前位置: 技术问答>linux和unix
多线程每个线程selecet为什么不会出现类似“惊群”现象?
来源: 互联网 发布时间:2015-11-04
本文导语: 有多个多线程,每个线程都selecet,为什么当一个socket可读的时候,不会唤醒每个线程里的select for(int i = 0; i 0) { } } 上面是一些骨架代码,,奇怪的是线程1的echo...
有多个多线程,每个线程都selecet,为什么当一个socket可读的时候,不会唤醒每个线程里的select
for(int i = 0; i 0)
{
}
}
上面是一些骨架代码,,奇怪的是线程1的echo只会被线程1的select到,为什么不会被“线程2”select到?当一个socket可读的时候,它怎么知道要唤醒正在select它的线程。它应该只能通知到socket所在的进程吧。
for(int i = 0; i 0)
{
}
}
上面是一些骨架代码,,奇怪的是线程1的echo只会被线程1的select到,为什么不会被“线程2”select到?当一个socket可读的时候,它怎么知道要唤醒正在select它的线程。它应该只能通知到socket所在的进程吧。
|
1 socket非常象命名管道,遵照典型的生产者/消费者模型设计。上述情况是由于线程1排在“睡眠队列”的头上,如果线程1收到一个echo后,下一个echo应该是线程2收到,依次循环....
2 socket是一种进程通信机制,可以在不同进程间传递信息。因此,“它应该只能通知到socket所在的进程吧”是错误的。
2 socket是一种进程通信机制,可以在不同进程间传递信息。因此,“它应该只能通知到socket所在的进程吧”是错误的。
|
你把每个fd都往readfds里FD_SET了没有?