2009-02-06 101 views
6

这是我正在做的任务,不,我不是在找你,只是给我答案。我只需要有人来指出我正确的方向,也许有一两行示例代码。Linux&C:如何在多进程程序中设置文件读取优先级?

我需要弄清楚如何从我的程序中设置文件读取操作的优先级。给点意见:

  • 服务器进程接收消息,并产生一个子来处理它
  • 孩子试图打开从消息中的文件名并开始加载文件内容到消息队列
  • 有可能几个孩子在同一时间运行,并初步消息包含一个优先级,这样一些消息可能会得到更多的设备接入

我能想到做到这一点(目前,反正),唯一的办法是增加计数器每次我创造一个信息,并做一些事情在计数器达到给定值后,像sched_yield那样分配优先级。这很可能是一种可怕的,可怕的方法,但这是我现在能想到的。这个任务更多地是关于消息队列,而不是其他任务,但是我们仍然需要具有数据传输优先级。

任何帮助/指导赞赏:)

回答

1

你确定你的任务是在谈论文件,而不是系统V消息队列?

阅读的手册页:

msgctl(2), msgget(2), msgrcv(2), msgsnd(2), capabilities(7), 
    mq_overview(7), svipc(7) 

虽然我想你可以使用一个文件作为键创建一个消息队列,从而使多个进程有办法通过消息队列,Sys系统会合V消息队列本身不是一个文件。

只是想知道,因为你特别提到“消息队列”,并谈论“优先级”,这可能会映射到例如msgtyp字段。 msgsnd和msgrcv,尽管很难告诉你分配的是什么信息。

+0

我已经有服务器接收来自多个客户端的消息,所以msgget/snd/rcv和ftok对我来说不是问题。我面临的挑战是如何从我的消息中获取优先级值,并根据消息离开每个服务器子级的速率或从磁盘读取数据的速率 – David 2009-02-06 03:23:23

+0

...来执行。 – David 2009-02-06 03:24:11

2

直到最近,Linux中没有IO优先级。现在有ionice。但我怀疑你是否打算在你的任务中使用它。

6

让子进程池共享一个信号量。一旦孩子获得信号量,它就可以从资源中读取预定义的字节数并将其返回给客户端。读取的字节数可能与请求的优先级有关。一旦进程读取了预定义的字节数,就释放信号量。