问题标签 [time-measurement]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
multithreading - 如何在多任务环境中测量多线程处理时间?
由于我在(抢占式)多任务、多核环境中运行我的多线程程序的性能评估测试,因此该进程可以定期换出。我想计算延迟,即只有进程处于活动状态的持续时间。这将使我能够推断出在非多任务环境下的性能如何,即只有一个程序在运行(大部分时间),或者在不同的工作负载上。
通常测量两种时间:
- 挂钟时间(即自进程启动以来的时间),但这包括进程被换出的时间。
- 处理器时间(即所有线程使用的 CPU 时间的总和),但这对于计算进程的延迟没有用。
我相信我需要的是单个线程的时间跨度,由于线程之间的任务依赖结构,它可能与任何线程使用的最大 CPU 时间不同。例如,在一个有 2 个线程的进程中,线程 1 在运行时的前三分之二(对于 CPU 时间 t)负载很重,而线程 2 在进程运行时的后三分之二(同样,对于 CPU 时间 t)。在这种情况下:
- 挂钟时间将返回 3t/2 + 上下文切换时间 + 其他进程使用的时间,
- 所有线程的最大 CPU 时间将返回接近 t 的值,并且
- 总CPU时间接近2t。
- 我希望作为测量输出收到的是制造跨度,即 3t/2。
此外,多线程本身会带来不确定性。这个问题可能可以通过多次运行测试并总结结果来解决。
此外,延迟还取决于操作系统如何调度线程;如果进程的某些线程等待 CPU 而其他线程运行,事情会变得更加复杂。但是让我们忘记这一点。
有没有一种有效的方法来计算/近似这个制造时间?为了提供代码示例,请使用任何编程语言,但最好在 linux 上使用 C 或 C++。
PS:我理解这个 makepan 的定义与调度问题中使用的定义不同。调度问题中使用的定义类似于挂钟时间。
c++ - C++ 函数的时间测量
我需要测量一个 C++ 程序的时间,尤其是一些递归函数的整体运行时间。其他函数内部有很多函数调用。我的第一个想法是在实际代码中实现一些时间测量功能。
gprof 的问题是,它打印出数据类型的类运算符的时间,但我只需要有关函数的信息,“-f func_name prog_name”将不起作用。
那么,科学中测量数值程序时间的最常用方法是什么?
它是这样的:
d - 如何用 D 合约组织时间不变检查?
例如,我必须确保某个实时系统的某个函数的工作时间为 20 毫秒或更短。我可以简单地在函数开始和结束时测量时间,然后断言差异是令人满意的。我在 C++ 中做到这一点。
但这看起来很像合同,只是时间检查是一个后置条件,而开始时的时间测量根本不是一个条件。将它纳入合同不仅是为了它的符号,而且也是为了建筑的原因。
所以我想知道,我可以使用合约功能来检查功能工作的时间吗?
vxworks - 测量定时器功能的持续时间
我有一个计时器函数(用于轮询),我想每 1uS 调用一次,但我也想确保有足够的时间让其他任务运行,所以我想测量执行此函数所需的时间。为此,我认为我可以clock_gettime()
在函数的开始和结束时使用。现在我的问题是,返回的两次总是相同的,我只是不相信我的函数会在不到 1 纳秒的时间内完成——这不可能。CPU 的时钟频率为 800MHz。我的代码:
我究竟做错了什么?开始时间和停止时间总是一样的...
c# - 如何使用 C# 收集击键的时间信息?
我想构建一个简单的 C# Windows 窗体应用程序来收集用户的击键数据。
基本上,用户需要输入一个长度为 10 的单词。我想记录每个键的按住时间,keydown 到 keydown 时间以及相邻击键的 keyup 和 keydown(所以有 10 + 9 + 9 = 28 个测量值)。
谁能告诉我如何使用文本框事件捕获这些信息?
提前致谢
time - 使用 CPU 时钟测量时间的问题
我知道在各种操作系统上使用 CPU 时钟计数器获取时间增量的标准方法。我的问题是,这样的操作系统如何考虑 CPU 频率的变化以达到省电的目的。我最初认为这可以基于操作系统使用特定调用来测量频率以根据正在使用的内核、当前设置的频率等来获得校正频率的事实来解释。但后来我意识到,不是吗?如果 CPU 频率在两个时钟查询之间降低并恢复到其原始值,则使任何时间增量不准确。
例如采取以下场景:
查询 CPU 周期。操作系统会降低 CPU 频率以节省电量。其他一些代码在这里运行。操作系统提高 CPU 频率以提高性能。查询 CPU 周期。将 delta 计算为周期差除以频率。
这将产生不准确的增量,因为两个查询之间的 CPU 频率不是恒定的。操作系统或必须使用 CPU 周期处理时间增量的程序如何解决这个问题?
azure - 在 Azure 上使用 `SDStopwatch` 减慢时间
我刚刚运行了一些代码来报告它在 Azure 网站实例上的性能;结果似乎有点不对劲。我重新运行了该操作,实际上它似乎是一致的: 对于一个实际花费超过三分钟(至少3 分 16 秒)的操作,System.Diagnostics.Stopwatch
执行时间为12 秒。
此过程在 WCF 数据服务“操作”的上下文中运行,并在 SQL 数据库中播种测试数据(这不是生产代码)。具体来说,它:
- 打开与 Azure SQL 数据库的连接,
- 禁用空约束,
- 用于
System.Data.SqlClient.SqlBulkCopy
锁定一个空表并使用缓冲流加载它,该缓冲流通过文件系统从 Azure Blob 存储中检索数据集 (2.4MB),解压缩它(GZip,4.9MB 膨胀)并解析它(CSV,349996 条记录,用自定义IDataReader
使用TextFieldParser
), - 更新同一个表的列以设置一个共同的值,
- 重新启用空约束。
不多也不少;没有什么特别密集的事情发生,我认为该操作主要是网络绑定的。
知道为什么时间变慢了吗?
笔记:
- 有趣的是,必须增加批量插入和更新命令的超时时间(设置为 5 分钟)。我读到默认是30秒,比报的12秒多;因此,我得出结论,以
SqlClient
不同的方式衡量时间。 - 本地执行的报告似乎完全正确,尽管它始终更快(使用 LocalDB 为 4-6 秒),因此可能只是效果不明显。
android - 在 Android 上测量长时间的运行时间(重新启动)
我需要在 Android 上测量经过的长时间,并且其间可能会重新启动设备。
据我了解,System.nanoTime()
每次设备重新启动时都会重置,并且System.currentTimeMillis()
不可靠,因为用户可以更改它。
我想出的唯一解决方案是听ACTION_SHUTDOWN
and BOOT_COMPLETED
,System.currentTimeMillisec()
用来计算经过的时间(用户不能在设备关闭时更改时钟时间,希望 :) )并将其添加到System.nanoTime()
我关闭之前的最后一个时间。
老实说,我不喜欢这个解决方案,因为它非常昂贵(我需要收听 2 个广播事件)并且不准确,但我想不出任何其他方法来做到这一点。
有任何想法吗?本地解决方案也对我有好处。
c - 如何在 C 中测量每个线程的时间?
我正在处理具有多个线程的代码,我想打印我完成分配给第 i 个线程的任务所花费的时间。这意味着我想打印每个线程使用 doSomeThing 函数完成的时间
如果我在之前添加gettimeofday(&thread_start, NULL)
然后在之后pthread_create
添加,我实际上是在测量每个线程花费的时间还是只是主要花费的时间?如果我把函数放在里面,他们不会创造竞争条件吗?gettimeofday(&thread_end, NULL)
pthread_create
gettimeofday
doSomething
如果您对如何测量每个线程的时间有任何想法,请告诉我,谢谢。
arduino - 以微秒为单位获取两个 arduino 之间经过的时间
我想使用 rx/tx 模块测量我的两个arduino之间经过的时间(以微秒为单位)。我做了我的代码,我注意到我的输出有问题。我希望你能帮助我。
A
(设备 1)和(设备 2)都B
负责使用本地时钟准确测量时间延迟。
- 如果时间
A
发出的信号是TSA
, B
接收信号的时间为TRB
,B
回复的时间是TSB
,A
接收回信号的时间是TRA
- 这样
TSA < TRB <TSB < TRA
, - 然后
A
测量TA = TRA -TSA
和 B
措施TB = TSB - TRB
。
TOF可以通过结合这两个测量值来估计:
Total time elapsed = (TA-TB)/2
发射器代码
接收方代码
发射机输出
正如您在我的公式中看到的那样,收到的时间应该更大。
接收器输出
我希望你能帮助我我的程序有什么问题。