草庐IT

计时表

全部标签

go - 每次计时器结束时运行函数的最有效方法,但有大量计时器(千/百万)

我正在运行一项服务,用户可以在其中上传持续时间,并且每次计时器用完时都必须重复执行一个函数。例如,用户说“每5分钟运行一次”,则此函数必须每5分钟运行一次。这是通过API完成的。对于少量计时器,这是微不足道的:funcdoEvery(dtime.Duration,ffunc(time.Time)){forx:=rangetime.Tick(d){f(x)//Runthefunctioneverydduration}}我可以在goroutine中运行每个计时器,而且效果很好。我可以使用一些基本的WaitGroups和同步功能来启动和停止一切。但如果我有数千或数百万个计时器怎么办?我可以为

windows - Windows 上 Go 中的高分辨率计时器(毫秒精度)

我正在尝试使用Go的time.Timer来安排需要以半毫秒的精度以正确的顺序运行的任务。这在OSX和Linux上工作得很好,但在Windows上每次都失败。下面的代码演示了这个问题。它设置了5个计时器,第一个为1毫秒,第二个为2毫秒,...,最后一个为5毫秒。一旦计时器触发,它的编号就会被打印出来。在OSX和Linux上,这显然会产生“12345”作为输出,但在Windows上,数字或多或少是随机的(在Win7和WindowsServer2012上测试过)。packagemainimport("fmt""time")funcmain(){vartimer1,timer2,timer3,

linux - 为 Linux 内核启动时间优化计时

我正在尝试优化linux在嵌入式设备(而非PC)上的启动时间目前正在分析启动顺序,我已在printk日志上启用时间信息。这是最优的方式吗?如果不是,我如何以最小的开销分析启动顺序(带时序)?附言:我在串行连接上有一个(设备的)终端&我在windows-XP上使用TeraTerm来访问它。 最佳答案 printktiminginfo的开销很小。但是,此信息并不总是有用,因为它不会告诉您用户空间中发生了什么。您可能想试试Bootchart。它是一个shell脚本,在启动期间在后台运行并从/proc收集数据。虽然它比printk计时信息的

c++ - 在已经运行的循环上添加另一个计时器

给定以下程序-#include#includeintmain(){uv_loop_tloop;uv_loop_init(&loop);std::cout第二个计时器句柄永远不会在循环中运行,因为循环已经在运行,并且永远不会打印“Timer2called”。所以我尝试在运行循环然后添加第二个计时器后暂时停止循环-....uv_run(&loop,UV_RUN_DEFAULT);//someworkuv_stop(&loop);//nowaddsecondtimeruv_run(&loop,UV_RUN_DEFAULT);//runagain....但这又一次不起作用,可能是因为在第一个循

c - 在给定时间频率(计时器)执行功能的最佳方式?

我有一个小程序需要在小型Linux嵌入式系统(ARM)中运行。它是用C语言编写的。它需要从系统制造商提供的API中轮询一些数据(2x64位),然后进行一些计算并通过网络发送数据。数据应每秒轮询30次左右(30Hz)。在C中最好的方法是什么?我已经看到使用sleep()的解决方案,但它似乎不是这项工作的最佳选择。 最佳答案 我建议考虑使用poll(2)多路复用系统调用来进行轮询。注意当poll等待和轮询输入时,它不消耗任何CPU如果每个事件的处理都需要相当长的时间(例如一毫秒或更长时间),您可能需要重新计算延迟。你可以使用timerf

c - 除了 POSIX 计时器,Linux 中还有哪些其他计时器 API?

我想在Linux中设计一个计时器,但由于某些系统限制和设计要求,我无法使用POSIX计时器API。有人可以告诉我,除了POSIX计时器之外,Linux中还有哪些可用的计时器设计机制?(要避免timer_create、timer_settime等)提前致谢。编辑:P.S:您提供的任何机制,请您给我一些有用的链接或示例链接注意:我们不能使用任何第三方库(如ACE库),因为我们的代码是专有代码。 最佳答案 查看我的answer.我发现有用的计时器之一是timerfd_create()Linux系统调用中提供的API。当您的应用程序构建在事

c++ - C/C++——在Linux下寻找实时计时事件

我正在寻找一种在Linux下使用C/C++执行计时事件的方法。例如。每100毫秒执行一段代码。(不多不少,软实时)到目前为止我看到的唯一选项是:无限循环,每次检查是否到执行时间。休眠线程直到它运行。无限检查是否到了运行时间,缺点是它(太)占用CPU。睡到时间到了,缺点是不精确。sleep时间只是一个引用值,它可以睡得更久。现在我想知道你们中是否有人知道如何在Linux下用C/C++进行实时计时事件。 最佳答案 您要使用什么几乎无关紧要—select()、epoll()、usleep()、settimer()。有些方法可以“采取”更高

c++ - 用户空间中的 Linux C/C++ 计时器信号处理程序

我需要一个C/C++linux中的函数(例如信号处理程序),它每'n'毫秒被激活一次。如何设置信号等...以毫秒分辨率注册定时器事件。精度不是特别关键,但需要在百毫秒左右。我是linux的新手,我真的不知道从哪里开始。 最佳答案 setitimer(POSIX2008标记为OBSolete)的一个更安全的替代方法是使用POSIX计时器,并让计时器到期函数在线程中运行,而不是在线程中运行信号处理程序。这样,您就不会仅限于使用异步信号安全功能。它们记录在此处:http://pubs.opengroup.org/onlinepubs/96

c - Linux 用户空间的高精度计时

现在,我正在尝试确定一种方法来测量特定函数将花费的时间(类似于pthread_create)。现在,当然,这些类型的功能都经过了极度优化,以尽可能减少时间;实际上,我的定时器在用户空间中使用gettimeofday以微秒为单位进行测量,因此它太少了,无法充分测量任何东西。通常,如果我能弄乱内核,我会使用类似get_cycles的东西来测量原始周期数作为性能指标。但是,我还没有找到在用户空间中执行此操作的方法。有没有办法使用get_cycles(或等效的)或我可以在用户空间中使用的其他更高精度的计时器来测量极快的功能? 最佳答案 使用

Linux 内核计时器子系统 : Precision vs. 分辨率

我正在尝试测量部分Linux内核代码的执行时间,发现有两个不同的计时器子系统。hrtimers代表高分辨率计时器,而hpet代表高精度事件计时器。分辨率与精度有何不同?http://www.mjmwired.net/kernel/Documentation/timers/ 最佳答案 HPET指的是特定的x86PC平台硬件(Linux确实有驱动程序)。HPET在维基百科文章中有描述:http://en.wikipedia.org/wiki/High_Precision_Event_Timerhrtimers是一个Linux子系统,它为