1.linux 两个线程 select同一个socket句柄,监控该句柄的可读状态,内核会怎么处理?可读时会内核会先唤醒队列里的其中一个线程处理,如果该线程读了,是否就不会唤醒余下的线程?这样看在进程调度的过程中很有可能会引起惊群效应。
2.linux 两个线程 分别select不同的socket句柄,监控句柄的可读状态,内核会怎么处理?如果线程1的max_fd=3,线程2的max_fd=4。当fd=4可读时,应该不会有问题。当fd=3可读时,是否就会导致内核可能先会唤醒线程2?
3.正确做法是否就是所有的select都应该在一个线程上执行?
可以观察到每次调用 select,都是传送要读写的 fd 集合给 内核,并阻塞等待内核响应。
当有读写事件发生的时候,select阻塞解除,同时 readfds,writefds,exceptfds 会清空并填入就绪的 fd 列表。
不存在你说的 1,2情况。
更仔细的内容请阅读 select的文档。