当前位置: 技术问答>linux和unix
setitimer中 ITIMER_VIRTUAL 和 ITIMER_PROF的区别
来源: 互联网 发布时间:2016-08-31
本文导语: 如题,我有10个进程,每个进程要设置定时器, 定时器i,然后进行系统调用 gethostbyname()这个系统函数,我的疑问是,我的定时器设置超时2秒该怎么设置,我的意图是:在调用gethostbyname()这个函数时,如果超过两秒 ...
如题,我有10个进程,每个进程要设置定时器,
定时器i,然后进行系统调用 gethostbyname()这个系统函数,我的疑问是,我的定时器设置超时2秒该怎么设置,我的意图是:在调用gethostbyname()这个函数时,如果超过两秒 则执行信号处理函数;
而不是 可能出现下列情况——A进程调用定时器,然后执行了gethostbyname(),执行一秒后,进程上下文切换,换到b进程,然后b进程执行了两秒,那这样的话 A进程的定时器 是不是已经到时间了……
上面说的那种情况是设置alarm(2);的情况吧?——不对请指正,
现在我发现了setitimer可以解决这个问题,但是 其中的ITIMER_VIRTUAL 和ITIMER_PROF的区别我却搞不清了,因为 PROF多了一个 进程在内核态的时间, 而 VIRTUAL只有用户态时间, 我现在就是想问, gethostbyname属于 内核态时间吗?
那如果我用用户态时间 设置时钟的话,那gethostbyname的调用时间 是不是就被忽略了呢……?很矛盾啊 谢谢各位了
定时器i,然后进行系统调用 gethostbyname()这个系统函数,我的疑问是,我的定时器设置超时2秒该怎么设置,我的意图是:在调用gethostbyname()这个函数时,如果超过两秒 则执行信号处理函数;
而不是 可能出现下列情况——A进程调用定时器,然后执行了gethostbyname(),执行一秒后,进程上下文切换,换到b进程,然后b进程执行了两秒,那这样的话 A进程的定时器 是不是已经到时间了……
上面说的那种情况是设置alarm(2);的情况吧?——不对请指正,
现在我发现了setitimer可以解决这个问题,但是 其中的ITIMER_VIRTUAL 和ITIMER_PROF的区别我却搞不清了,因为 PROF多了一个 进程在内核态的时间, 而 VIRTUAL只有用户态时间, 我现在就是想问, gethostbyname属于 内核态时间吗?
那如果我用用户态时间 设置时钟的话,那gethostbyname的调用时间 是不是就被忽略了呢……?很矛盾啊 谢谢各位了
|
首先要说的是,进程切换都是微妙级别,所以你们下面的说法是瞎担心了:
进程上下文切换,换到b进程,然后b进程执行了两秒,那这样的话 A进程的定时器 是不是已经到时间了.
你完全可以放心,执行进程b期间也肯定会有时间片分给A执行的,不会让A的定时器超过时间无法执行的。
调用setitimer有三个时间递减的计算方式:
ITIMER_REAL:计时器的值实时递减,发送的信号是SIGALRM
ITIMER_VIRTUAL:进程执行时递减计时器的值,发送的信号是SIGVTALRM
ITIMER_PROF:进程和系统执行时都递减计时器的值,发送的信号是SIGPROF
ITIMER_REAL,都是用户空间信息.
这里你使用ITIMER_REAL就可以了,绝对可以在定时器里面调用你的gethostbyname,放心去使用吧.
进程上下文切换,换到b进程,然后b进程执行了两秒,那这样的话 A进程的定时器 是不是已经到时间了.
你完全可以放心,执行进程b期间也肯定会有时间片分给A执行的,不会让A的定时器超过时间无法执行的。
调用setitimer有三个时间递减的计算方式:
ITIMER_REAL:计时器的值实时递减,发送的信号是SIGALRM
ITIMER_VIRTUAL:进程执行时递减计时器的值,发送的信号是SIGVTALRM
ITIMER_PROF:进程和系统执行时都递减计时器的值,发送的信号是SIGPROF
ITIMER_REAL,都是用户空间信息.
这里你使用ITIMER_REAL就可以了,绝对可以在定时器里面调用你的gethostbyname,放心去使用吧.
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。