我正在努力获得更好的理解,因此我可以在创建Android应用程序/服务时确定潜在互操作性问题的可靠性影响范围.我想弄清楚如何确定进程优先级.服务和活动之间的优先级差异以及调度程序是否以不同方式处理其优先级.基本上我正在努力深入了解一个活动或服务被来自不同应用程序(甚至是Linux内核)的流氓进程所匮乏的可能性.
有没有人有你可以推荐的任何好的链接...我的搜索还没有发现太多.
谢谢!
编辑:我关心的是处理器时间切片/调度,而不是内存资源(内存资源在android文档中有详细描述.)再次感谢!
Linux perf工具(前一段时间命名perf_events)有几个内置的通用软件事件.其中最基本的两个是:task-clock和cpu_clock(内部称为PERF_COUNT_SW_CPU_CLOCK和PERF_COUNT_SW_TASK_CLOCK).但他们的错误在于缺乏描述.
ysdx用户报告说man perf_event_open有简短的描述:
PERF_COUNT_SW_CPU_CLOCK
This reports the CPU clock, a high-resolution per-
CPU timer.
PERF_COUNT_SW_TASK_CLOCK
This reports a clock count specific to the task
that is running.
Run Code Online (Sandbox Code Playgroud)
但描述很难理解.
有人可以提供有关如何以及何时权威的答案task-clock和cpu-clock事件都占?它们与linux内核调度程序有什么关系?
当task-clock并cpu-clock会给出不同的价值观?我应该使用哪一个?
这是我的查询
CREATE EVENT reset ON SCHEDULE AT TIMESTAMP DO UPDATE `ndic`.`students` SET `status` = '0';
Run Code Online (Sandbox Code Playgroud)
如何在每天下午1点将状态更新为"0".我该怎么做而不是TIMESTAMP?
通过调度程序源代码(2.6.34,kernel/sched.c),我可以看到如何使用"可插拔"调度程序,我相信我理解要实现的接口.我还不明白的是如何将我的代码内置到内核中.至少,指向其他网站的指针将不胜感激.
现在,我正在内核源代码树中查找SCHED_FIFO,SCHED_RR和SCHED_NORMAL,所以我真的在寻找一种更有见地的方式来看待它:-)
编辑:作为一些背景,我对FreeBSD调度程序(以及一般的FreeBSD内核)非常熟悉,所以我不是在寻找关于如何进行进程/线程级调度的指针.我正在寻找一种方法来添加我自己的调度程序和普通的linux调度程序(类似于SCHED_FIFO).
编辑#2:下面的BFS指针是一个很好的开始,但它仍然将CFS从内核中删除.sched.c现在看起来像:
#ifdef CONFIG_SCHED_BFS
#include "sched_bfs.c"
#else
// original sched.c
#endif // CONFIG_SCHED_BFS
Run Code Online (Sandbox Code Playgroud)
我很乐意看到答案或指针如何更好地做到这一点(即保持CFS,至少目前为止).
编辑#3:我已经在下面回答了我自己的问题,因为我认为我已经弄明白了.
有人可以解释SCHED_OTHER,SCHED_FIFO和SCHED_RR之间的区别吗?
谢谢
是否可以创建一个立即触发的工作?当我想让这个工作成为现在的时候我用现在的日期和时间来存储一个cron表达式字符串 - 我觉得它太复杂了,还有另一种方法可以立即触发工作吗?
提前致谢.
我一直在阅读Heroku的文档,但发现它很容易让人困惑.我有一个应用程序,它既有一个基于Web的前端(带有Web进程),也有一个任务设置为每天午夜由Heroku Scheduler运行(显示heroku ps为run.1).
所以,我heroku ps看起来像这样:
Process State Command
------- ---------- ------------------------------------
run.1 up for 21h python webpage/listings.py
web.1 up for 8m python ./manage.py runserver 0.0.0..
Run Code Online (Sandbox Code Playgroud)
我想弄清楚的是,这被认为是两个dynos?该run任务是否被视为后台任务?
主要问题:这会花钱吗?
我希望有可能让演员入睡一会儿.演员应该决定自己要睡多久.由于Thread.sleep()不是推荐的方法,我想在akka中使用调度程序.因此我定义了一个演员是另一个演员可以注册被唤醒.
class Scheduler extends Actor {
def receive = {
case Sleep(duration) => context.system.scheduler.scheduleOnce(duration) {
sender ! Ring
}
}
}
Run Code Online (Sandbox Code Playgroud)
但发送方从不接收Ring消息.所以我的问题是
我希望将event_scheduler全局设置为ON即使MySQL重新启动; 我该怎么做到这一点?
SET GLOBAL event_scheduler = ON;
Run Code Online (Sandbox Code Playgroud) 我有点糊涂,因为我正在尝试使用@Scheduled注释,但Spring似乎没有找到我的方法.最终结果是,我的所有注释方法@Scheduled都没有被执行.
我用以下声明调用了Spring的任务魔法:
<beans> <!-- XMLNS, XSD declarations omitted for brevity -->
<context:component-scan base-package="com.mypackage"/>
<task:executor id="executor" pool-size="5"/>
<task:scheduler id="scheduler" pool-size="5"/>
<task:annotation-driven scheduler="scheduler" executor="executor"/>
</beans>
Run Code Online (Sandbox Code Playgroud)
我有一个看起来像这样的界面:
package com.mypackage;
public interface MyInterface {
public void executePeriodically();
}
Run Code Online (Sandbox Code Playgroud)
有这样的相应impl:
package com.mypackage.impl;
// imports omitted for brevity
@Service
public class MyInterfaceImpl implements MyInterface {
@Scheduled(cron = "0/5 * * * * ?")
public void executePeriodically() {
System.out.println("The time is now : " + new Date());
}
}
Run Code Online (Sandbox Code Playgroud)
现在预期的结果是,我有一个非常吵闹的小家伙告诉我每5秒钟的时间......但实际上我什么都没有.我已尝试使用接口方法和impl方法上的注释,但这似乎没有改变任何东西.
我确定正在初始化执行程序和调度程序,因为我在日志中有以下内容:
INFO - …Run Code Online (Sandbox Code Playgroud)