c - 在 C 中测量没有 pthread 的开销
问题描述
我想分享一个我最近遇到的测试问题并讨论它:
编写一个 C 程序,粗略测量 UNIX/Linux 系统上内核和用户空间之间的上下文切换开销(不使用 >pthread API)。请指出您的粗略估计所基于的假设。
我想与更高级的 C 程序员讨论这个问题的不同选项。
我在 C 编程方面的知识有限,我记录了自己以提供可接受的答案:
https://www.researchgate.net/post/How_can_I_measure_thread_creation_and_destruction
https://github.com/eliben/code-for-blog/blob/master/2018/threadoverhead/thread-pipe-msgpersec.c
尽管我的知识有限,但我很快意识到这个问题的模棱两可。事实上,这个问题并没有规定是否应该以时间或记忆为单位给出答案。
我个人选择使用库 time.h 和一个非常简单的片段来开发我的推理测量时间。结果应除以 1 000 000。
我的回答有道理还是我完全没有抓住重点?
#include<time.h>
#include<stdio.h>
int main(){
clock_t begin=clock();
int i;
for(i=0;i<1000000;i++){
printf("%d",i);
}
clock_t end=clock();
printf("Time taken:%lf",(double)(end-begin)/CLOCKS_PER_SEC);
}
解决方案
你应该尝试不同的方法。
如前所述,您正在尝试测量
>内核和用户空间之间的上下文切换开销
从用户到内核的上下文切换是通过syscall
. 肯定 printf 下面使用write
syscall,但是这个 syscall 太重而无法获得可靠的估计。为了改进这个估计,你应该回答这个问题——Linux 中最快的系统调用是什么?答案是 -带有无效参数的系统调用。
PS不要忘记测量精度。此外,您应该将结果除以 2,因为系统调用是往返的。
推荐阅读
- python - InvalidArgumentError:断言失败:[无法将字节解码为 JPEG、PNG、GIF 或 BMP]
- html - 缩放网页超过 100% 会弄乱整个文本
- c - 调用函数时出现分段错误
- jenkins - Jenkins slave 作为 kubernetes pod
- javascript - 请指出我在学习异步 Javascript 时的误区
- embedded - HID 报告请求
- python - 如何使用带有烧瓶的 apscheduler 运行 Python 脚本以每天运行?
- css - 如何保持宽度小但 img 适合 div 容器
- sql - 将 varchar 值转换为数据类型 numeric 时 SQL 转换失败
- python - 从文本文件中读取特定的行或字符,但无法识别文本