groovy - Sleep() 方法和操作系统 - 调度程序 (Camunda/Groovy)
问题描述
我有一个问题要问你们,它不像往常那样具体,这可能会让回答有点烦人。
我正在使用的工具是 Camunda 与 Groovy 脚本的结合,目标是减少最大 cpu 负载(或峰值负载)。我通过在一定的时间范围内“拉伸”工作负载来做到这一点,因为平台似乎对短时间内大量的工作负载输入不满意。由此产生的问题是,当有人试图在 UI 级别操作 Camunda 时,Camunda 不会做出流畅的反应。
所以我写了一个小脚本,基本上只是让每个单独的进程在运行之前确定自己的“睡眠时间”,如果超过了某个阈值。这取决于有多少进程试图与单个进程同时运行。
看起来像:
进程要启动 -> 进程询问有多少其他进程正在运行 -> waitingTime = numberOfProcesses * timeToSleep * iterationOfMeasures
测试它我发现我可以扩展工作负载并平滑 UI - Levels。但现在我需要描述为什么这完全有效。
问题是:
- sleep 方法究竟做了什么?
- sleep 方法在 CPU 级别上有什么作用?
- 操作系统调度程序如何对睡眠方法做出反应?
- 即:调度程序是否重新安排或只是“等待”给定的时间?
- 我如何重新创建和测试上面给出的问题?
主要目标不是让你回答这个问题,但你能给我一个提示,让我找到合适的文献来回答这些问题吗?也许你记得一本帮助你理解这类事情的书,或者一位教授向你推荐了一些东西。(我的不会回答,我不能怪他)
我很感激提示和或建议!
解决方案
我确定你可以使用计时器事件
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 中的当前线程。
因此,它没有做有效的事情,而是被阻止了。
推荐阅读
- java - Spring Boot 2 Maven 目录视图解析器
- post - 如何编写要在 Informatica Cloud 后处理命令中使用的脚本
- c# - DateTime 和 DateTimeOffset 转换问题
- bash - 访问名称中包含整数的变量
- vue.js - 我可以获取 Vue.js 组件作为实例吗?
- php - Ubuntu PHP 5 安装 Curl 找不到包
- project-reactor - 在 JAX-RS 驱动的服务器中使用反应器时如何处理阻塞调用?
- asp.net-mvc - 如何从 Controller 获取 @ViewBag.UserName 到 _layout 页面?
- jenkins - 如何以阻塞方式链接构建管道?
- c++ - 将多态性与 operator+ 重载的模板类一起使用。如何实现基类?