【发布时间】:2011-03-22 14:34:33
【问题描述】:
几天前,我不得不调查一个问题,即我的应用程序在(显然)处于空闲状态时显示异常高的 CPU 使用率。我将问题追踪到一个循环,该循环旨在阻止recvfrom 调用,而套接字已设置为O_NONBLOCK-ing,从而导致自旋锁。有两种解决问题的方法:将套接字设置为阻塞或使用poll 或select 轮询套接字上的可用数据。我选择了前者,因为它更简单。但我想知道为什么有人会创建一个非阻塞套接字然后单独轮询它。阻塞套接字不做同样的事情吗?使用非阻塞套接字和轮询组合的用例是什么?在一般情况下它有什么优势吗?
【问题讨论】: