忘记密码   免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 2005 | 回复: 3

[C] 为啥差别那么大? [复制链接]

论坛徽章:
0
发表于 2018-03-12 20:52 |显示全部楼层
本帖最后由 mjus 于 2018-03-12 20:52 编辑

  1. #include<stdio.h>
  2. #include<pthread.h>
  3. #include<math.h>
  4. #include<unistd.h>

  5. #define NBR_THRS  8

  6. void* busywork(void* arg) {
  7.    long t =  (long) arg;
  8.    double res = 0;

  9.    for(long i =0; i< t; i++)
  10.        res += sin(i) * cos(i);
  11. //printf("res=%f\n", res);
  12.    return NULL;
  13. }

  14. int main() {
  15. pthread_t ID[NBR_THRS];
  16. long i;
  17. for(i=0; i<NBR_THRS; i++)
  18. pthread_create(&ID[i], NULL, busywork, (void*) 100000000);

  19. for(i=0; i<NBR_THRS; i++)
  20. pthread_join(ID[i], NULL);
  21. }
复制代码


本程序若去除子程序中的打印语句,在我的电脑上运行仅花0.002秒;若加上子程序中的打印语句,则花20.635秒之多!请大侠们解释下为啥差别那么大?编译都用 gcc -Wall -O3 demo.c -lpthread -lm


论坛徽章:
0
发表于 2018-03-13 09:25 |显示全部楼层
io本来就比纯运算慢好多个数量级

论坛徽章:
6
数据库技术版块每日发帖之星
日期:2015-11-27 06:20:00程序设计版块每日发帖之星
日期:2015-12-01 06:20:00每日论坛发贴之星
日期:2015-12-01 06:20:0015-16赛季CBA联赛之佛山
日期:2017-03-26 23:38:0315-16赛季CBA联赛之江苏
日期:2017-07-17 10:08:4415-16赛季CBA联赛之北京
日期:2018-03-04 17:01:50
发表于 2018-03-13 19:19 |显示全部楼层
目测 O3 busywork 优化成

  1. /* 去除子程序中的打印语句 */

  2. void* busywork(void* arg) {
  3.    return NULL;
  4. }
复制代码



论坛徽章:
0
发表于 2018-03-22 12:15 |显示全部楼层
在所有的操作中,I/O操作是最耗时的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:wangnan@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP