从一个描述符进行无阻塞读取的效率

问题描述 投票:0回答:2

我开发了一个C程序,该程序监视来自不同来源的传入消息,并根据消息进行处理。我的职责是仅等待一个来源。当然,等待必须是非阻塞的。

最有效的方法是什么?

  1. 无阻塞read()?

  2. 选择/投票/投票方式?

好吧,如果它消耗的CPU /时间大约相同,我将选择更简单的选项,即读取的一个。谢谢。

c select read-write
2个回答
0
投票

select,文件描述符超时。如果您的选择超时是无限的,请改为使用阻塞读取。如果您选择的内容超时,但是您的程序没有执行其他任何操作,请改为使用阻塞读取。


0
投票

使用non_blocking read()有一些缺点:

  • 当数据输入非常缓慢时,程序将频繁不必要地唤醒,这会浪费CPU资源。
  • 当确实有数据输入时,如果程序正在休眠,则程序可能不会立即读取它,因此程序的延迟将很短。
  • 使用这种模式处理大量文件描述符会很麻烦。

但是如果您即将收到的数据太小,使用选择/轮询将进行系统调用(例如,read),需要多次调用。

为了更简单,我认为使用选择/轮询更好。

© www.soinside.com 2019 - 2024. All rights reserved.