首页 > 解决方案 > Sleep() 方法和操作系统 - 调度程序 (Camunda/Groovy)

问题描述

我有一个问题要问你们,它不像往常那样具体,这可能会让回答有点烦人。

我正在使用的工具是 Camunda 与 Groovy 脚本的结合,目标是减少最大 cpu 负载(或峰值负载)。我通过在一定的时间范围内“拉伸”工作负载来做到这一点,因为平台似乎对短时间内大量的工作负载输入不满意。由此产生的问题是,当有人试图在 UI 级别操作 Camunda 时,Camunda 不会做出流畅的反应。

所以我写了一个小脚本,基本上只是让每个单独的进程在运行之前确定自己的“睡眠时间”,如果超过了某个阈值。这取决于有多少进程试图与单个进程同时运行。

看起来像:

进程要启动 -> 进程询问有多少其他进程正在运行 -> waitingTime = numberOfProcesses * timeToSleep * iterationOfMeasures

没有脚本的 CPU 使用曲线 1,3。曲线 2,4 用脚本

测试它我发现我可以扩展工作负载并平滑 UI - Levels。但现在我需要描述为什么这完全有效。

问题是:

  1. sleep 方法究竟做了什么?
  2. sleep 方法在 CPU 级别上有什么作用?
  3. 操作系统调度程序如何对睡眠方法做出反应?
  4. 即:调度程序是否重新安排或只是“等待”给定的时间?
  5. 我如何重新创建和测试上面给出的问题?

主要目标不是让你回答这个问题,但你能给我一个提示,让我找到合适的文献来回答这些问题吗?也许你记得一本帮助你理解这类事情的书,或者一位教授向你推荐了一些东西。(我的不会回答,我不能怪他)

我很感激提示和或建议!

标签: groovyscriptingoperating-systemschedulercamunda

解决方案


我确定你可以使用计时器事件

https://docs.camunda.org/manual/7.15/reference/bpmn20/events/timer-events/

它允许将下一个任务触发推迟由表达式定义的一段时间。


关于在 java/groovy 中的睡眠:https ://www.javamex.com/tutorials/threads/sleep.shtml

使用睡眠会阻塞 groovy/java/camunda 中的当前线程。

因此,它没有做有效的事情,而是被阻止了。


推荐阅读