我知道DateTimeOffset存储UTC日期/时间和偏移量.我也从MSDN博客文章中了解到,DateTimeOffset应该用于"使用夏令时".
我正在努力理解的是DateTimeOffset"夏令时"的工作原理.我的理解,很少有,是夏令时是一个政治决定,不能从纯粹的抵消中推断出来.如果它只存储一个偏移,那么这个结构对DST是否友好呢?
我认为可能有一种方法可以将TimeZoneInfo类与DateTimeOffset结合使用.我该怎么办?
最后,有什么更好的方法可以实现以下目标吗?
(我看过Jon Skeet关于Noda-Time的一些帖子,但我认为它还没有准备好生产,我不知道它是否能很好地融入我们现有的解决方案).
这是我们的场景.该服务器是出于在英国时间运行的不幸遗留原因.我们的客户开始从澳大利亚投入运营,其中有多个时区.其他国家可以随时投入使用.
我们有一个基于Hardcodet调度程序的调度程序(使用DateTimeOffset).它工作得很好.但是,在我们的数据库中,我们只存储足够的数据来构造DateTime对象(见下文),在我们的子类和管道代码中我们只使用DateTime,因为最初我们只支持英国用户.
该调度程序负责固定和动员工厂设备.因此,预定事件在用户的DST调整后的当地时间运行至关重要.
用户在我们的网站上输入时间表; 目前,它作为星期几,小时和分钟存储在数据库中.当读取数据时,我们为该日,小时和分钟的下一次出现创建一个DateTime对象.我可以自由地改变db结构以另外存储偏移量或时区.
当该日期和时间到达时,调度程序发送命令(并重试一段时间).它然后在下周的同一天和时间再次运行(虽然该服务实际上已经被回收,然后代码将再次运行).
我需要实现的是使用从Hardcodet子类调度的调度程序在该时区调整的本地日期和时间触发调度事件.如果DateTimeOffset确实是DST感知的,那么我需要做的就是存储一个偏移并改变我们的管道代码以使用这个结构,但我得到的印象并不是那么简单.(我们或许可以从工厂的GPS位置获取当前时区,但这是另一天的讨论:)).
可以使用sched_setaffinity将线程固定到cpu,从而提高性能(在某些情况下)
从linux手册页:
限制在单个CPU上运行的进程还可以避免在进程停止在一个CPU上执行然后重新开始在另一个CPU上执行时发生的高速缓存失效导致的性能成本
此外,如果我想要更实时的响应,我可以将该线程的调度程序策略更改为SCHED_FIFO,并将优先级更高为某个高值(最多sched_get_priority_max),这意味着所讨论的线程应始终抢占任何其他运行的线程在它准备就绪的cpu上.
但是,此时,在实时线程刚刚抢占的cpu上运行的线程可能已经驱逐了大部分实时线程的1级缓存条目.
我的问题如下:
我在一个非常小的商店(2个人)工作,自从几个月前我开始以来,我们一直依赖Windows计划任务.最后,我已经决定我已经有了一些无能为力的悲伤,比如
再一次,我们是一家小商店.我正在寻找类似的调度系统升级,而不是我使用源代码控制(VSS - > Subversion).我正在寻找系统的建议
您可能熟悉保罗格雷厄姆的论文,"制造者的时间表,经理的时间表".文章的关键在于,对于创意和技术专业人士来说,会议是对生产力的诅咒,因为他们倾向于导致"计划碎片化",将自由时间分解成太小而无法获得解决困难问题所需的焦点的块.
在我的公司中,我们通过最大限度地减少造成的中断数量已经看到了显着的好处,但是我们用来决定时间表的蛮力算法并不够复杂,无法很好地处理大群人.(*)
我正在寻找的是,如果有一个众所周知的算法可以最大限度地减少这种生产力中断,在一组N制造商和管理者中间.
在我们的模型中,
请注意,如果没有会议,制造商和经理都会体验到最佳的生产力.如果必须安排会议,那么制造商更喜欢会议背靠背,而管理人员并不关心会议的进展.请注意,因为所有中断都被视为对制造商同样有害,所以持续1秒的会议与持续3小时的会议如果划分可用空闲时间则没有区别.
问题是决定如何安排涉及N个人的任意数量的M个不同会议,其中给定会议中的每个人必须将繁忙间隔放入他们的日程中,使得它不与任何其他繁忙 …
今天早上我读到了Linux实时调度.根据Robert Love的"Linux系统编程"一书,有两个主要的调度.一个是SCHED_FIFO,fifo,第二个是循环法SCHED_RR.我理解了fifo和rr算法是如何工作的.但是,由于我们有系统调用,
sched_setscheduler (pid_t pid, int policy, const struct sched_parem *sp)
Run Code Online (Sandbox Code Playgroud)
我们可以为我们的流程明确设置调度策略.所以在某些情况下,由root运行的两个进程可以有不同的调度策略.作为一个具有SCHED_FIFO和另一个具有SCHED_RR并具有相同优先级的进程.在那种情况下,将首先选择哪个流程?FIFO分类过程或RR分类过程?为什么?
考虑这种情况.有三个过程A,B,C.所有人都有同样的优先权.A和B是RR分类过程,C是FIFO分类过程.A和B是可运行的(因此两者都在一段时间内交替运行).目前A正在运行.现在C变得可运行了.在这种情况下,是否
1. A will preempt for C, or
2. A will run until its timeslice goes zero and let C run. Or
3. A will run until its timeslice goes zero and let B run.
a) here after B runs till its timeslice becomes zero and let C run or
b) after B runs till its timeslice becomes zero and let A run again (then C will starve …Run Code Online (Sandbox Code Playgroud) 我想在我的网站上创建一个通知系统?(类似堆栈溢出)
我们如何安排一个任务,每24小时为用户邮寄通知?
我们可以使用MVC4,还是应该使用Windows服务?
编辑:
我FluentScheduler在MVC4应用程序中使用3个月的经验.
FluentScheduler很容易配置和使用,但它不会随时运行任务.有时运行,有时不运行.
我认为调度的最佳方法是Windows Service确保在特定时间运行任务.
我有一个ScheduledThreadPoolExecutor,我用它来安排一个以固定速率运行的任务.我希望任务以指定的延迟运行最多10次,直到它"成功".在那之后,我不希望重试任务.所以基本上我需要停止运行计划任务,当我希望它被停止时,但不关闭ScheduledThreadPoolExecutor.知道我怎么做吗?
这是一些伪代码 -
public class ScheduledThreadPoolExecutorTest
{
public static ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(15); // no multiple instances, just one to serve all requests
class MyTask implements Runnable
{
private int MAX_ATTEMPTS = 10;
public void run()
{
if(++attempt <= MAX_ATTEMPTS)
{
doX();
if(doXSucceeded)
{
//stop retrying the task anymore
}
}
else
{
//couldn't succeed in MAX attempts, don't bother retrying anymore!
}
}
}
public void main(String[] args)
{
executor.scheduleAtFixedRate(new ScheduledThreadPoolExecutorTest().new MyTask(), 0, 5, TimeUnit.SECONDS);
}
}
Run Code Online (Sandbox Code Playgroud) 我正在研究OpenMP的调度,特别是不同的类型.我理解每种类型的一般行为,但澄清将有助于何时选择dynamic和guided安排.
英特尔的文档描述了dynamic调度:
使用内部工作队列为每个线程提供一个块大小的循环迭代块.线程完成后,它会从工作队列的顶部检索下一个循环迭代块.默认情况下,块大小为1.使用此调度类型时要小心,因为涉及额外的开销.
它还描述了guided调度:
与动态调度类似,但块大小从大开始减小以更好地处理迭代之间的负载不平衡.可选的chunk参数指定它们使用的最小大小块.默认情况下,块大小约为loop_count/number_of_threads.
由于guided调度在运行时动态地减少了块大小,为什么我会使用dynamic调度?
我研究过这个问题,从达特茅斯找到了这张桌子:
guided被列为具有high开销,同时dynamic具有中等开销.
这最初是有意义的,但经过进一步调查,我读了一篇关于该主题的英特尔文章.从上一张表中可以看出,guided由于在运行时分析和调整块大小(即使正确使用),理论调度也会花费更长的时间.但是,在英特尔文章中它指出:
引导时间表最适合小块大小作为其限制; 这提供了最大的灵活性.目前尚不清楚为什么它们在更大的块尺寸下会变得更糟,但是当它们被限制在大块尺寸时它们可能会花费太长时间.
为什么块大小与guided花费更长时间相关dynamic?通过将块大小锁定得太高而导致性能损失缺乏"灵活性"是有意义的.但是,我不会将其描述为"开销",锁定问题会破坏先前的理论.
最后,它在文章中说明:
动态计划提供了最大的灵活性,但在计划错误时可以获得最大的性能影响.
dynamic调度比最优化更有意义static,但为什么它比最优化guided?这只是我在质疑的开销吗?
这个有点相关的SO帖子解释了与调度类型相关的NUMA.这与此问题无关,因为所需的组织因这些调度类型的"先到先得"行为而丢失.
dynamic调度可能是合并的,导致性能提高,但同样的假设应该适用guided.
以下是英特尔文章中不同块大小的每种调度类型的时序,以供参考.它只是来自一个程序的记录,一些规则适用于每个程序和机器(特别是调度),但它应该提供一般趋势.
编辑(我的问题的核心):
guided调度的运行时间?具体例子?为什么它比dynamic某些情况慢?guided,dynamic反之亦然?Linux内核使用哪些调度算法?
哪里可以获得有关linux内核的更多信息?(OS第一道菜......学生水平)