【问题标题】:How do I schedule a task in Perl?如何在 Perl 中安排任务?
【发布时间】:2009-12-09 01:01:53
【问题描述】:

有谁知道 perl 是否支持任务调度器?

我正在开发一个控制一堆 perl 脚本的 c# 程序。 perl 脚本通过套接字接口与某些设备通信。设备,“目标” , 是一种需要实时交互的嵌入式系统设备。

我需要满足的一个要求是,当我收到消息“A”时 从设备,我需要安排一个将在 15 毫秒内发生的事件 在将来。此事件将向 UT 发送消息。我们在这里称它为“B”。 延迟功能在这里不起作用,因为不应该阻止其他消息,因为 消息“B”。有时,我还需要每 15 毫秒发送一次消息“B”。

或者也许 Perl 在这里不是一个好的选择。

谢谢

【问题讨论】:

  • 什么操作系统?什么CPU? 15 毫秒是硬限制吗?

标签: perl scheduled-tasks


【解决方案1】:

有几个可用于 Perl 的事件驱动的非阻塞框架。他们中的任何一个都应该能够做你需要的事情。这里有三个示例可以帮助您入门:POEAnyEventIO::Async。也就是说,如果您的时间限制很严格(“每次都在鼻子上 15 毫秒”),那么使用 C 等低级语言编写的实时调度程序可能更合适。

【讨论】:

  • 别忘了还需要一个实时内核。
【解决方案2】:

为正确的事情使用正确的工具。我强烈建议您不要将 Perl 用于此类任务。例如,如果您使用 Erlang 来完成此任务,您只需在纯 Erlang 中执行此操作(只是语言核心,而不是任何模块/库):

receive
  {Device, "A"} -> spawn(fun() -> send_interval(15, UT, "B") end)
end

send_interval(Interval, Dest, Msg) ->
  receive after Interval ->
      send_interval(Interval, Dest, Dest ! Msg)
  end.

或使用定时器模块

receive
  {Device, "A"} -> timer:send_interval(15, UT, "B")
end

在 Perl 中可以实现的功能更加可靠和简单。经过 7 年的 Perl 日常专业开发,我可以向您推荐。

【讨论】:

    猜你喜欢
    • 2012-05-02
    • 2013-03-30
    • 2021-12-05
    • 2011-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-20
    相关资源
    最近更新 更多