$ time foo
real 0m0.003s
user 0m0.000s
sys 0m0.004s
$
Run Code Online (Sandbox Code Playgroud)
"真实","用户"和"系统"在时间输出中意味着什么?
在对我的应用进行基准测试时哪一个有意义?
如果您在免费计划中看到 Cloudflare Workers 的定价部分,他们有以下内容
每个请求最多 10ms CPU 时间
并在以下付费计划中
每个请求最多 30 秒的挂机时间
通常,执行一个执行有用操作的脚本需要超过 10 毫秒的时间。根据任务的不同,甚至 30 秒的墙上时间也可能很短。
如果您查看 Worker 的文档限制:CPU 运行时部分,它有
大多数 Worker 请求消耗的时间不到一毫秒。很少能找到正常运行的 Workers 脚本超出 CPU 时间限制的情况。免费计划中的工作人员最多可消耗 10 毫秒,付费计划中的捆绑工作人员最多可消耗 50 毫秒。付费计划还提供长达 30 秒的持续时间,以增加计算时间。免费计划的 10 毫秒津贴足以满足大多数用例(包括应用程序托管)的执行时间。
Workers 脚本的实际运行时间没有限制。只要发送请求的客户端保持连接,Workers 脚本就可以继续处理、发出子请求并代表该请求设置超时。当客户端断开连接时,与该客户端请求关联的所有任务都将被取消。您可以使用 event.waitUntil() 将取消再延迟 30 秒,或者直到传递给 waitUntil() 的 Promise 完成。
虽然就 CPU 时间的一般意义而言,本文中提到的 Wall time是正确的。我不认为这在这种情况下是准确的含义,因为在链接的帖子中,CPU 时间是内核或用户空间中的代码执行时间。
CPU time per request与 AWS Lambda 中的代码执行 CPU 时间也不相似,因为它提到了以下内容
Workers 脚本的实际运行时间没有限制。
因此脚本的实际运行时间(即:CPU 执行时间)并不像 AWS Lambda 中那样限制为 15 分钟。
然后
我正在为我的C程序使用时钟功能来打印当前程序的执行时间。我在输出中得到的时间是错误的。我想以秒,毫秒和微秒为单位显示时间。
#include <stdio.h>
#include <unistd.h>
#include <time.h>
int main()
{
clock_t start = clock();
sleep(3);
clock_t end = clock();
double time_taken = (double)(end - start)/CLOCKS_PER_SEC; // in seconds
printf("time program took %f seconds to execute \n", time_taken);
return 0;
}
time ./time
time program took 0.081000 seconds to execute
real 0m3.002s
user 0m0.000s
sys 0m0.002s
Run Code Online (Sandbox Code Playgroud)
我希望输出大约3秒,但是显示错误。如您所见,如果我使用Linux命令时间运行该程序,我将得到正确的时间,我想使用我的c程序显示相同的时间。
可能重复:
UNIX中的wall-clock-time,user-cpu-time和system-cpu-time具体是什么?
以下程序将运行命令,然后显示有关使用时间的各种值:
#include <iostream>
#include <sys/times.h>
using namespace std;
static void pr_times(clock_t, struct tms *, struct tms *);
static void do_cmd(char *);
int main(int argc, char *argv[])
{
int i;
setbuf(stdout, NULL);
for (i = 1; i < argc; i++)
do_cmd(argv[i]); /* once for each command-line arg */
exit(0);
}
static void
do_cmd(char *cmd) /* execute and time the "cmd" */
{
struct tms tmsstart, tmsend;
clock_t start, end;
int status;
printf("\ncommand: %s\n", cmd);
if ((start = times(&tmsstart)) == …Run Code Online (Sandbox Code Playgroud) 我正在尝试从运行 Angstrom Linux 发行版的 Beagle Bone 中的 ADC 读取数据。我需要使用延迟机制,例如sleep(),仅在特定时间读取样本,以帮助符合特定的采样率。我还需要计算执行时间。
这是一个示例 POC(概念证明),以演示我面临的问题:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
clock_t begin, end;
while(1)
{
begin = clock();
sleep(1); // delay for 1 sec
end = clock();
printf("Execution time = %f\n",((float)(end-begin)/CLOCKS_PER_SEC));
}
}
Run Code Online (Sandbox Code Playgroud)
我总是将执行时间设为0.000000.
为什么我的结果不是以1.000000秒为单位?我的猜测是调用sleep()会抢占我的程序,但我不确定。
我还有什么其他选项可以计算包含延迟的已用执行时间?