aero 回复于:2003-08-10 21:01:44

偶觉得,已经不菜了。

如果你菜,那偶就还是鸟蛋了。

coolhome 回复于:2003-08-10 20:27:00

[code:1:334e6e5b17]

include

#include

#include

struct timeval {

long tv_sec; /* 秒数 */

long tv_usec; /* 微秒数 */

};

int gettimeofday(struct timeval *tv,struct timezone *tz);

main()

{

struct timeval tpstart,tpend;

float  timeuse;

unsigned int i;

int rc;

int p1 = 0;

gettimeofday(&tpstart,NULL);

for(i=0;i<1000;i++)

rc = pthread_create(&sid, NULL, (void*)&threads, (void *)&p1))

gettimeofday(&tpend,NULL);

timeuse=1000000*(tpend.tv_sec-tpstart.tv_sec)+tpend.tv_usec-tpstart.tv_usec;

timeuse/=1000000;

printf("Used Timef/n",timeuse);

exit(0);

[/code:1:334e6e5b17]

coolhome 回复于:2003-08-10 20:27:25

上面取得的是线程的1000次创建的时间

jackie God 回复于:2003-08-10 22:09:00

虽然不太懂但是也要说两句!不知道这几条行不行!?

用Real_timer Jiffy,或者SoftIRQ,

Task_struct中有一个start_time 是进程创建时的Jiffies。

但是线程具体情况不太清楚!

还有,好像是这样

strut timeval {

int tv_sec; /* 秒数 */

int tv_usec; /* 微秒数 */

};

struct timespec是long的纳妙!

coolhome 回复于:2003-08-11 19:00:09

jackie God    的意思是不是说:strut timeval取得不是一个正确的时间呢?

应该使用struct timespec?

我不是很清楚.

另外:以上两个程序是不是正确还没有确定,我机器上无linux,这几个是我随手编出来的.没有验证过.

无双 回复于:2003-08-11 19:25:54

这两个都不会很准确吧

如果不是使用计帐时间的话

因为系统中同时有多个进程在进行

不可能只让你独占CPU的

aero 回复于:2003-08-11 20:16:32

从原理上讲,偶同意无双的。

jackie God 回复于:2003-08-12 13:33:23

应该使用struct timespec!

既然不记帐,可以使用atomic操作!

betty 回复于:2003-08-31 22:59:45

我不懂了,gettimeofday可以取得纳秒的时间吗?

还有,gettimeofday函数本身的开销怎么去掉?

amble_shisu 回复于:2003-09-03 17:48:46

gettimeofday的开销我计算过,大概0.6ms;

其实也不会太准,因为中间万一调度就

而且关于那个线程的,pthread_create创建的线程可能在返回以前就已经运行了,甚至运行结束了.

你这样创建一千次取平均值,未免太儿戏了.

amble_shisu 回复于:2003-09-03 17:50:25

gettimeofday精确到百万分之一秒

amble_shisu 回复于:2003-09-03 18:08:11

用原子操作也是一种方法 ,如果能保证我的系统里面只有#0号进程和我的进程,那无所谓.

amble_shisu 回复于:2003-09-03 18:09:58

否则你不可锁掉其他进程.

betty 回复于:2003-09-03 23:18:04

是不是不同的redhat版本不同就会有不同的命令?在人家机器上可以通过的程序在我机器上不行

sky-walker 回复于:2003-09-04 00:25:16

大家将就将就吧,分时操作系统的时间获得本身就是个不精确值,

也不可能只计算一个用户程序,至少编码时要用一下setpriority(),

把优先级先设置一下;

至于时间的计算,我想getrusage()可以把systemcall时间和user

running时间分开(也是不精确的)

renguoh 回复于:2003-09-04 16:56:49

不知道大家有没有仔细看楼主的程序,我认为这一块肯定问题

for(i=0;i<1000;i++)

pid_t fork();

这样不是创建1000子进程了,而是2**1000子进程了,因为在你

创建的子进程中,也在不断的执行for循环的。如果运行这个

程序的话,那么系统的资源肯定马上就会枯竭的。因此,因该将

循环的次数变成10,那么就是创建1024个进程了。为了可以更加

清楚地看见进程创建的过程,可以这样来做:

for(i=0;i<1000;i++)

{

pid_t pid1 = fork();

printf("%dth process have created,The process ID is",i.pid1);

}

如果要确定fork一个子进程的时间,那么应该了解

内核是如何来调度和控制进程的。我们知道,Unix是一个分时

操作系统。每一个进程都是通过占用CPU的时间片来获得执行的。

当然,一个进程占用的时间片概率由该进程的优先权阀值来确定,

如果它的优先权很高,那么,当它用完CPU时间片以后,再次获得

CPU的时间片的概率也就越高,否则的话在系统资源比较紧张的话

概率就比较低,可能需要很长的一个时间才能再次获得对CPU的占有。

因此,可能每次fork子进程的时间都是不一样的。如果需要在较短的

时间内来创建子进程,那么就必须提高父进程的优先权,这可以由

系统调用nice来实现。

在基于传统的对换系统中,父进程的创建是由内核来去确定的,由于

在本程序中仅仅是创建子进程,没有其他操作,因此,父进程创建子

进程的大部分时间主要是在创建子进程的数据区和栈区上,而子进程的

正文区是和父进程共享的。因此,本例程序应该写成这样:

#include

#include

#include

strut timeval {

long tv_sec; /* 秒数 */

long tv_usec; /* 微秒数 */

};

int gettimeofday(struct timeval *tv,struct timezone *tz);

main()

{

struct timeval tpstart,tpend;

float timeuse;

unsigned int i;

pid_t pid1;

gettimeofday(&tpstart,NULL);

nice(0);

for(i=0;i<1000;i++)

{

pid1 = fork();

switch(pid1)

{

case 0:

exit(0);

default:

printf("%dth process have created,The process ID

is",i.pid1);

wait((int*)0);

}

}

gettimeofday(&tpend,NULL);

timeuse=1000000*(tpend.tv_sec-tpstart.tv_sec)+tpend.tv_usec-tpstart.tv_usec;

timeuse/=1000000;

printf("Used Time:%f/n",timeuse);

return 0;

}

betty 回复于:2003-09-04 23:54:40

renguoh同学,你的这个程序误差会过大.其中swich等其他的函数会影响fork时间.

renguoh 回复于:2003-09-05 11:01:52

上面写的程序只是让我们能看得更清楚子进程创建的过程,当然,你为了纯粹创建1000个进程,不考虑子进程退出后变成僵尸进程,就只可以这样了:

for(i=0;i<10;i++)

pid_t pid1 = fork();

不知道betty有没有仔细看楼主的程序,这个程序肯定是取不到进程创建的时间的,因为每个子进程都会不断执行gettimeofday(&tpend,NULL)这个函数以及以下的代码(我已经在Solaris 8系统上试过)

其实你所说的swith函数和printf函数相对进程创建的时间来讲,是很小的,可能printf函数花费的时间要比switch函数要稍微长 一点,如果将printf函数屏蔽掉,时间可能会短一点,这两种情况我都试过,结果是前一种情况为0.133秒,后一种情况是0.113666秒。如果你 觉得有更好的方法,请告诉我,我们可以探讨探讨。

我在做测试的时候用的程序是(在Solaris 8操作系统上运行过):

#include

#include

#include

#include

int main()

{

struct timeval tpstart,tpend;

float timeuse;

unsigned int i;

pid_t pid1;

gettimeofday(&tpstart,NULL);

nice(0);

for(i=0;i<1000;i++)

{

pid1 = fork();

switch(pid1)

{

case 0:

exit(0);

default:

printf("%dth process have created,The process ID is",i.pid1);

//可以根据情况将上一行屏蔽

wait((int*)0);

}

}

gettimeofday(&tpend,NULL);

timeuse=1000000*(tpend.tv_sec-tpstart.tv_sec)+tpend.tv_usec-tpstart.tv_usec;

timeuse/=1000000;

printf("Used Time:%f/n",timeuse);

return 0;

}

没有将printf函数屏蔽掉执行的结果,Used time: 0.133644

将printf函数屏蔽掉执行的结果, Used time: 0.112244

当然,每次执行的结果可能有一点偏差!

sqzhong 回复于:2003-09-08 18:19:07

因为我们要的是仅仅创建进程的时间,楼上的程序太繁琐了,所以结果太不精确了。我们得到的结果是创建进程大约130微妙。(redhat8.0)

linux进程线程视频百度云,linux 进程线程时间片相关推荐

  1. 黑马程序员Linux系统开发视频之创建守护进程模型

    黑马程序员Linux系统开发视频之创建守护进程模型 1.创建子进程,父进程退出   所有工作在子进程中进行形式上脱离了控制终端 2.在子进程中创建新会话   setsid()函数   使子进程完全独立 ...

  2. python百度云资源-Python开发视频百度云分享

    原标题:Python开发视频百度云分享 Python有很好的3D渲染库和游戏开发框架,有很多使用Python开发的游戏,如迪斯尼卡通城.黑暗之刃.常用PyGame.Pykyra等和一个PyWeek的比 ...

  3. 千锋中级Python视频百度云

    千锋中级Python视频百度云免费赠送给大家,希望大家在Python学习路上一帆风顺! 所属网站分类: 资源下载 > python视频教程 作者:外星人入侵 原文链接: http://www.p ...

  4. python视频免费百度云-Python开发视频百度云分享

    原标题:Python开发视频百度云分享 Python有很好的3D渲染库和游戏开发框架,有很多使用Python开发的游戏,如迪斯尼卡通城.黑暗之刃.常用PyGame.Pykyra等和一个PyWeek的比 ...

  5. mysql动力节点百度云_动力节点MySQL数据库视频 百度云 网盘 下载

    资源名称:动力节点MySQL数据库视频 百度云 网盘 下载 # o4 E. q% ]2 ?百度网盘下载链接:[/hide]- t4 L+ S# b2 T( }! d) n& d 密码:dff7 ...

  6. linux程序设计百度网盘,linux系统编程视频 百度网盘下载

    本帖最后由 雇佣兵333 于 2015-5-19 16:15 编辑 c教程目录: Linux开发快速入门培训 gcc快速入门 Makefile快速入门 GDB快速入门 Linux系统编程之文件篇 01 ...

  7. 在Ubuntu 14.04 64bit上安装百度云Linux客户端BCloud

    百度云是一个不错的网盘,Bcloud 是一个 Linux 下超赞的客户端, 官网 github: https://github.com/LiuLang/bcloud-packages 和kwplaye ...

  8. linux环境编程 百度云,linux环境下使用百度云网盘

    linux环境下使用百度云网盘 linux下经常需要备份一些文件到云端,现在能用的也就只有度娘的百度云网盘了,在github上发现一个挺好的项目,bypy,用来在linux下使用百度云. 项目地址:h ...

  9. 通过python的百度云客户端可以把linux数据备份到百度云

    引言 网站备份真的很重要,前段时间已经被坑过一次了,幸好数据没有完全丢,勉强恢复了,虽然丢失了几篇文章.之前一直是每隔几天手动备份一下重要的数据,然后下载到本地.但是有时候会忘记备份这件事,所以,自动 ...

最新文章

  1. android Fragments详解五:与activity通讯
  2. linux 国内 NTP时间服务器地址
  3. python【蓝桥杯vip练习题库】PREV-52小数第n位(模拟)
  4. Windows 命令窗口(cmd)命令不能用解决办法
  5. SpringBoot入门和配置
  6. python字节码大全
  7. java poi之Excel的读取
  8. javafx 和swing_Swing和JavaFX:使用JFXPanel
  9. Introduction of Version Control/Git, SVN
  10. Lucene搜索引擎
  11. Hadoop日记Day13---使用hadoop自定义类型处理手机上网日志
  12. p41_数据报与虚电路
  13. 运维自动化之ansible playbook安装mysql
  14. C#中pdf转word
  15. mysql数据库事务模拟转账_mysql数据库事务阐发:实现银行转账功能的优化,附代码+实现过程...
  16. LaTeX:pgf usepackage(宏包)的中译
  17. 小鸟 java_java 飞翔小鸟源码
  18. c语言程序设计 猜数字,猜数字游戏c语言编程,c语言编程 编一个猜数字游戏
  19. s+清辅音,读作对应的浊辅音
  20. 重新开博,短期目标,工作计划

热门文章

  1. 北京联通和华为5G Capital项目入选ICT中国(2021)最佳城市创新规划案例
  2. 小提琴一把位各调的手指位图
  3. vbs发送http请求
  4. XVideo 一个能自动进行压缩的小视频录制库
  5. INTRINS 函数详解
  6. 考勤助手——基于CS三层结构的子系统设计
  7. 仿照网易云界面做的Flask网页音乐播放器(豪华版)
  8. Dynamo_图纸序号简单调整
  9. <整理不易|全网独家|欢迎收藏>《信息资源管理》第4章真题整理,信息系统资源内容管理
  10. opporeno5支持鸿蒙系统吗,opporeno5pro支持5G吗-支持北斗导航吗