Workq

作业调度服务器
授权协议 MPL
开发语言 Google Go
所属分类 程序开发、 作业/任务调度
软件类型 开源软件
地区 不详
投 递 者 杨安歌
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

Workq 是一个用 Go 开发的作业调度服务器。主要特性:

  • 异步和同步的作业处理

    • 提交作业,然后在作业完成后返回结果,最多等待 TTL

    • 提交作业并马上获得执行结果

  • 在任意时间临时安排作业调度

  • 使用数值表示作业优先级

  • 可以制定每个作业的 TTR (time-to-run) - 限制最大执行时间

  • 可以制定每个作业的 TTL 超时 - 限制作业最大存活时间

  • 每个作业可单独设置重试策略,包括 max-attempts 和 max-fails 参数

示例代码:

job := &workq.FgJob{
    ID: "6ba7b810-9dad-11d1-80b4-00c04fd430c4",
    Name: "ping",
    TTR: 5000,          // 5 second time-to-run limit
    Timeout: 60000,         // Wait up to 60 seconds for a worker to pick up.
    Payload: []byte("ping"),
    Priority: 10,       // @OPTIONAL Numeric priority, default 0.
}
result, err := client.Run(job)
if err != nil {
  // ...
}

fmt.Printf("Success: %t, Result: %s", result.Success, result.Result)
  • 什么是上下文切换 上下文切换,有时也称为进程切换或任务切换,是CPU中央处理单元)从一个进程,或线程切换到另一个进程或线程。 进程,有时也称为任务,是程序的执行实例。在 Linux 中,线程是轻量级进程,可以并行运行,并与其父进程(即创建它们的进程)共享地址空间和其他资源。 上下文是指CPU寄存器和程序计数器在任何时间点的内容。寄存器是 CPU 内部的少量,非常快的内存,用于通过提供对常用值的快速

  • 中断下半部机制之一,workqueue。 概要 workqueue运行在进程上下文,因为其允许用户创建内核线程,所以其必须运行在process context中,且其允许sleep睡眠,并且可调度。 如何判断使用workqueue还是softirq/tasklet 如何该中断下半部任务需要sleep,则使用workqueue 如果该中断下半部任务不能sleep,则使用softirq/tasklet

  • 软硬件协同设计是未来发展的主流,软硬件的界限越来越模糊,软硬件的设计思想是相通的,实现方法是各异的,实现的结果上当然也存在较大差别,因此,很有必要做好软硬件的协同设计。 什么是workqueue?Linux中的Workqueue机制就是为了简化内核线程的创建。通过调用workqueue的接口就能创建内核线程。并且可以根据当前系统CPU的个数创建线程的数量,使得线程处理的事务能够并行化。workqu

  • 首先要区分kernel中的waitqueue和workqueue概念,这是两个不同的内核机制 workqueue是利用进程上下文来处理内核中的一些小型任务,将一些复杂耗时的任务可以放到workqueue的线程中执行,节省时间 waitqueue是等待队列用于使进程等待某一特定的事件发生而无需频繁的轮询,不需要执行任务的时候,让进程睡眠,等待某个条件发生,一旦条件达成,任务被唤醒,开始执行,执行完毕

 相关资料
  • 关于处理程序,我读过,它们不存在很长时间的延迟,并将在系统重新启动后终止。所以他们不适合我的任务。 但是AlarmManager似乎是解决这个问题的一个很好的候选者,因为在允许的情况下,它们甚至在系统重启后仍然存在,并且可以重新运行应用程序。但是在Android文档中,警报管理器是用于必须在特定时间运行的任务(比如闹钟)。但我的任务每分钟都要执行。 然后是后台服务。这是更多的任务,如在后台下载,因

  • AUTOMATING TASKS WITH JOB SCHEDULING 像任何使用 Linux 的人一样,黑客经常有他们想要定期运行的任务、脚本或其他任务。例如,你可能希望为你的系统设置一个自动文件备份, 或者你希望像我们在第 11 章做的那样转存日志文件。另一方面,黑客可能希望每天晚上或者在他们工作或上学的时候让他们的系统运行第 8 章里的 MySQLscanner.sh 脚本。这些都是调度自

  • 我使用Quartz调度器执行10个作业。所有这些工作都有自己的导火索。因此它们是异步执行的。 然而,现在我需要这些工作中的2个,以更具体的方式执行。假设Job1每偶数分钟执行一次,Job2每奇数分钟执行一次。现在我想让Job2等待Job1完成。示例:Job1在10:02开始执行。10点03分,Job2的触发器被触发。但是在Job2开始执行之前,如果Job1已经完成,它将查看它。 你知道我怎么解决问

  • 现在我需要实现作业队列,因为有些作业不能并行启动。问题是某些作业的状态()是从客户机传递的,为了排队的目的,应该保持这些状态。另一方面,我不能根据用户请求调度作业,因为我不知道什么时候应该执行它!(应该在上一个作业之后立即执行)

  • 问题内容: 我在负载均衡器后面有一层相同的应用程序服务器。出于操作原因,我的约束是两个应用程序服务器上的应用程序配置必须相同,以便可以轻松添加和删除节点。所有应用服务器共享相同的数据库。应用服务器未/将不会集群。 到现在为止,它一直运行良好,但是现在我希望有一个计划的作业,该作业恰好在其中一个应用程序服务器上执行。所有应用服务器都将运行Quartz,并且具有相同的运行时间表。触发器将在每台应用服务

  • 我试图建立一个聊天应用程序使用XMPP+PHP自制API+本地Android数据库。我想使用在后台运行的XMPP(作为服务或后台作业)告诉我的应用程序,如果有新消息到达,就从API中获取数据。然后将其存储在本地数据库中,并用更新的内容更新我的消息框。 我应该理解谷歌在年复一年地锁定Android系统吗? https://medium.com/exploring-android/exploring-