【问题标题】:Linux & C: How to set file reading priority in multi-process program?Linux & C:如何在多进程程序中设置文件读取优先级?
【发布时间】:2009-02-06 02:37:16
【问题描述】:

这是我正在处理的一项任务,不,我不是在找你给我答案。我只需要有人为我指明正确的方向,也许只需要一两行示例代码。

我需要弄清楚如何在我的程序中设置文件读取操作的优先级。言归正传:

  • 服务器进程收到一条消息并生成一个子进程来处理它
  • child 尝试从消息中打开文件名并开始将文件内容加载到消息队列中
  • 可能有多个孩子同时运行,初始消息包含优先级,因此某些消息可能会获得更多设备访问权限

我能想到的唯一方法(现在,无论如何)是每次创建消息时增加一个计数器,并在计数器达到该进程分配的优先级的给定值后执行 sched_yield 之类的操作.这很可能是一种可怕的,可怕的方法,但这是我目前所能想到的。分配更多的是关于消息队列,但我们仍然必须拥有数据传输优先级。

感谢任何帮助/指导 :)

【问题讨论】:

    标签: c linux


    【解决方案1】:

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

    【讨论】:

    • 其实……还不错!谢谢!根据你的用户名,我想你知道给我这个作业的导师吗?
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      您确定您的任务是在讨论文件而不是系统 V 消息队列吗?

      阅读手册页:

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

      虽然我认为你可以使用文件作为密钥来创建消息队列,以便多个进程通过消息队列进行会合,但 Sys V 消息队列本身并不是文件。

      只是想知道,因为您特别提到了“消息队列”,并谈到了“优先级”,这可能会映射到例如的 msgtyp 字段。 msgsnd 和 msgrcv,虽然很难用你提供的信息来判断作业的真正含义。

      【讨论】:

      • 我已经让服务器从多个客户端接收消息,所以 msgget/snd/rcv 和 ftok 对我来说不是问题。我面临的挑战是如何从我的消息中获取一个优先级值,并在消息离开每个服务器子节点的速率或读取数据的速率上强制执行它
      猜你喜欢
      • 2018-04-12
      • 1970-01-01
      • 1970-01-01
      • 2022-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 2010-12-01
      相关资源
      最近更新 更多