Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets select()套接字调用CPU消耗_Sockets_Select_Cpu_Sleep - Fatal编程技术网

Sockets 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中的套接字和文件描述符上有数据可用。但是,只要该集合中的任何文件描述符上有可用的数据,您

如果我有下面的select调用代码,并且假设套接字FD在大部分时间内都没有准备好进行I/O,那么该线程是占用CPU还是休眠并让另一个线程执行该任务。select()是CPU密集型调用吗

while(1)
{
   select(maxfd, &rfds, NULL, NULL, NULL);
}

如果超时=0(轮询类型)而不是NULL,行为是否相同。

如果超时值为NULL,选择将无限期阻止,直到RFD中的套接字和文件描述符上有数据可用。但是,只要该集合中的任何文件描述符上有可用的数据,您的代码就会占用整个CPU,因为您不会显示任何提示从套接字中删除数据的内容。(对select的第二次调用将立即返回,表明套接字上仍有数据)


如果您传入一个0的out timeval进行选择,它将是一个非阻塞轮询。这相当于使用MSG_DONTWAIT标志调用send()或recv()(但不复制数据)。

谢谢您提供的信息。无限期阻塞时,线程会消耗CPU吗?无限期阻塞后select()如何恢复?谁将通知阻止select的线程?