当前位置: 首页 > 知识库问答 >
问题:

如何使用抢占来抢占区块

宗政兴发
2023-03-14

我目前正在制造流程线上构建模型。目的是创建一个包含多台机器和操作员的模型。操作员在多个点执行各种任务。然而,我要求操作员遵循特定的工作时间表,并在错开的时间Rest。因此,我在每个代理内创建了时间表,以定制他们的Rest时间。

我面临的问题是,我需要操作员在Rest时间暂停当前的任务。因此,我一直在探索捕捉块中的抢占功能,但未能获得我所需要的。

我将在下面说明一个示例。假设运算符正在执行“receiveLot_V”的当前任务,而在这个任务中,是Rest时间。在Rest时间,调度触发进入流程图,以抓住当前运算符进行Rest(我需要捕捉每个运算符处于Rest的持续时间,同时不允许Rest时的运算符在资源池中可用,以在其他地方被抓住)。

我已经允许用于中断的捕捉块具有更高的任务优先级,但是操作员只是停留在当前位置,似乎在他/她被捕捉后没有继续进行用于中断的流程。

此外,对于某些任务,我会在抓取时将操作员发送到特定节点以执行任务。当操作员正在移动且中断时间命中时,我遇到了一个错误,如最后一张图像所示。根pop_DirectOperators[0]。enter指的是操作员内部的工艺流程,可用于断开和根。pop_设备[0]。查塞多。sendTo是指操作员被发送到特定节点以执行其任务的过程。

我如何解决这个问题?我是否错误地理解了抢占功能?我尝试了多种抢占设置的组合,但似乎都不适用于我的情况。

共有1个答案

诸葛乐逸
2023-03-14

听起来你在尝试使用一个单独的过程来表示中断,这是一种(不常见的)替代方法(见下文)。该错误表明您正在将资源代理发送到该进程中,而不是一个表示“中断请求”的虚拟代理(然后该虚拟代理将抓住适当的资源代理进行中断)。

先发制人中断建模的典型方法有:

>

  • 设置由资源池属性指定的中断(确保其优先级高于占用这些资源的代理的优先级)。如果你的Rest有固定的时间安排,这很好。然后,在您希望受中断抢占影响的所有服务/扣押块中发生抢占。

    如上所述,但使用停机块指定中断模式。在如何指定中断方面提供了更大的灵活性,但仍然只能在停机块可以指定的范围内。

    对于完全“自定义”的情况(例如,可能需要以某种方式动态确定单个资源单元的中断),使用单独的流程来“引起”中断:将代表中断请求的代理(例如,自定义类型的中断请求)注入到从适当的池中获取适当资源的流程中(这种注入可以由单个资源单元代理本身的行为驱动),并以任何需要的方式对随后的Rest进行建模(例如,只是简单的延迟或更复杂的决定Rest何时结束的事情)。您需要确保中断请求代理具有比其他任务更高的优先级(即,流入其他服务/捕获块的其他代理),并设置为先占。

    需要理解的重要事情是:

    >

  • 您可以在将抢占其他任务(如果优先级更高)的任务发生的块上指定“任务可能抢占”(即,您在“抢占者”的服务/抢占块上指定这一点)。

    您在将被抢占的任务发生的块上指定“任务抢占策略”(即,您在“抢占”的服务/抓取块上指定此策略)。然后,就如何处理被“踢出”的任务(代理)而言,您有指定的选项。如果指定“无抢占”,则即使“源”任务设置为抢占并且具有更高的优先级,也不会发生抢占。

    优先级是“全局的”(例如,如果在特殊中断html" target="_blank">流程流捕获块中说,传入代理具有优先级100,则它随后发送到相关资源池的捕获请求将与这些资源代理正在执行或被要求执行的所有其他任务的优先级进行比较,这些任务的优先级由它们最初到达的任何捕获/服务块确定).

    你的截图表明你没有在正确的块上设置抢占块选项(以及可能/可能向你的特殊中断流发送错误的代理);见上述信息。

  •  类似资料:
    • 我希望源%1的代理使用tool1和tool2。为了实现它,我应该在抓住块中编写什么代码? 如图所示

    • 内核抢占点 调度本质上体现了对CPU资源的抢占。对于用户进程而言,由于有中断的产生,可以随时打断用户进程的执行,转到操作系统内部,从而给了操作系统以调度控制权,让操作系统可以根据具体情况(比如用户进程时间片已经用完了)选择其他用户进程执行。这体现了用户进程的可抢占性(preemptive)。但如果把ucore操作系统也看成是一个特殊的内核进程或多个内核线程的集合,那ucore是否也是可抢占的呢?其

    • 我拿到这张桌子是为了抢先做最短工作 在G之前,它执行前有2秒,我需要包括它吗? 我在回答中用甘特图给出的表格是 我的问题是,是否可以包括F到达之前的等待时间?

    • goroutine本来是设计为协程形式,但是随着调度器的实现越来越成熟,Go在1.2版中开始引入比较初级的抢占式调度。 从一个bug说起 Go在设计之初并没考虑将goroutine设计成抢占式的。用户负责让各个goroutine交互合作完成任务。一个goroutine只有在涉及到加锁,读写通道或者主动让出CPU等操作时才会触发切换。 垃圾回收器是需要stop the world的。如果垃圾回收器想

    • 问题内容: 我最近正在阅读 Linux Kernel Development ,并且我有一些有关禁用抢占的问题。 在第7章的“中断控制”部分中,它表示: 此外,禁用中断也会禁用内核抢占。 我还从书中了解到,在以下情况下可能会发生内核抢占: 当中断处理程序退出时,返回内核空间。 当内核代码再次被抢占时。 如果内核中的任务显式调用schedule() 如果该内核中的任务阻塞(导致对schedule()

    • 我想知道是否有可能在netty中抢占先前的writeAndFlush。即,我如何在netty消息中启用一些优先级?如果在writeAndFlush中不太可能强制执行这个优先级,那么有没有可能用eventloop来处理?