Sockets select()套接字调用CPU消耗
如果我有下面的select调用代码,并且假设套接字FD在大部分时间内都没有准备好进行I/O,那么该线程是占用CPU还是休眠并让另一个线程执行该任务。select()是CPU密集型调用吗Sockets select()套接字调用CPU消耗,sockets,select,cpu,sleep,Sockets,Select,Cpu,Sleep,如果我有下面的select调用代码,并且假设套接字FD在大部分时间内都没有准备好进行I/O,那么该线程是占用CPU还是休眠并让另一个线程执行该任务。select()是CPU密集型调用吗 while(1) { select(maxfd, &rfds, NULL, NULL, NULL); } 如果超时=0(轮询类型)而不是NULL,行为是否相同。如果超时值为NULL,选择将无限期阻止,直到RFD中的套接字和文件描述符上有数据可用。但是,只要该集合中的任何文件描述符上有可用的数据,您
while(1)
{
select(maxfd, &rfds, NULL, NULL, NULL);
}
如果超时=0(轮询类型)而不是NULL,行为是否相同。如果超时值为NULL,选择将无限期阻止,直到RFD中的套接字和文件描述符上有数据可用。但是,只要该集合中的任何文件描述符上有可用的数据,您的代码就会占用整个CPU,因为您不会显示任何提示从套接字中删除数据的内容。(对select的第二次调用将立即返回,表明套接字上仍有数据)
如果您传入一个0的out timeval进行选择,它将是一个非阻塞轮询。这相当于使用MSG_DONTWAIT标志调用send()或recv()(但不复制数据)。谢谢您提供的信息。无限期阻塞时,线程会消耗CPU吗?无限期阻塞后select()如何恢复?谁将通知阻止select的线程?