如何解决Sleep() 方法和操作系统 - 调度程序Camunda/Groovy
我有一个问题要问你们,但它不像往常那样具体,所以回答起来可能有点烦人。
我正在使用的工具是 Camunda 与 Groovy 脚本的结合,其目标是减少最大 cpu 负载(或峰值负载)。我通过在特定时间范围内“拉伸”工作负载来做到这一点,因为平台似乎对短时间内输入的大量工作负载不满意。由此产生的问题是,当有人试图在 UI - 级别操作时,Camunda 不会反应顺畅。
所以我写了一个小脚本,如果超过某个阈值,它基本上只是让每个进程在运行前确定自己的“睡眠时间”。这是基于有多少进程试图与单个进程同时运行。
看起来像:
进程要启动 -> 进程询问还有多少其他进程正在运行 -> waitingTime = numberOfProcesses * timetoSleep * iterationOfMeasures
CPU-Usage Curve 1,3 without the Script. Curve 2,4 With the script
测试它我发现我可以拉伸工作负载并平滑 UI - 级别。但现在我需要描述为什么这完全有效。
问题是:
- 睡眠方法究竟有什么作用?
- sleep 方法对 cpu - Level 有何作用?
- 操作系统调度程序如何对睡眠方法做出反应?
- 即:调度程序是重新安排还是只是“等待”给定的时间?
- 如何重新创建和测试上面给出的问题?
主要目标不是让你回答这个问题,但你能给我一个提示,让我找到合适的文献来回答这些问题吗?也许你记得一本帮助你理解这类事情的书,或者一位教授向你推荐了一些东西。 (我的不会回答,也不能怪他)
非常感谢您的提示和/或建议!
解决方法
我相信你可以使用计时器事件
https://docs.camunda.org/manual/7.15/reference/bpmn20/events/timer-events/
它允许将下一个任务触发器推迟一段时间由表达式定义。
关于 java/groovy 中的睡眠:https://www.javamex.com/tutorials/threads/sleep.shtml
使用 sleep 会阻塞 groovy/java/camunda 中的当前线程。
所以不是做一些有效的事情,而是被阻止。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。