$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [boost] [interprocess]why message_queue receive() will consume so much CPU resource
From: jon_zhou_at_[hidden]
Date: 2009-09-08 09:55:24
The code can trap in sched_yield (),(see below)
why it still consume high CPU resource?
(gdb) bt
#0 0xffffe410 in __kernel_vsyscall ()
#1 0x401b706c in sched_yield () from /lib/tls/libc.so.6
#2 0x0804e88f in thread_yield ()
at ../boost138inst/include/boost-1_38/boost/interprocess/detail/os_thread_functions.hpp:1
04
#3 0x0804c22b in boost::interprocess::interprocess_condition::do_timed_wait (
this=0x40018018, tout_enabled=false, abs_time=@0xbff77a70, mut=@0x40018014)
at ../boost138inst/include/boost-1_38/boost/interprocess/sync/emulation/interprocess_cond
ition.hpp:125
#4 0x0804bfc2 in boost::interprocess::interprocess_condition::do_wait (this=0x40018018,
mut=@0x40018014)
at ../boost138inst/include/boost-1_38/boost/interprocess/sync/emulation/interprocess_cond
ition.hpp:70
-----Original Message-----
From: ZHOU,JON (A-China,ex2)
Sent: Tuesday, September 08, 2009 10:21 AM
To: boost_at_[hidden]; ZHOU,JON (A-China,ex2)
Subject: [interprocess]why message_queue receive() will consume so much CPU resource
Hi there
I just found that message_queue::receive() or message_queue:: timed_receive () consume high CPU
resource, (99% CPU) the code like the below:
//create message_queue
date d(2009,Sep,8); //an arbitrary date
//construct a time by adding up some durations durations
ptime t1(d, hours(0)+minutes(0)+seconds(1)+millisec(0));
while (1)
{
for(int i = 0; i < 100; ++i){
int number;
//mq.receive(&number, sizeof(number), recvd_size, priority);
mq.timed_receive(&number, sizeof(number), recvd_size, priority,t1);
}
}
As I know, both the receive() & timed_receive() are block method, there should be sleep mechanism inside. why it still need so much CPU resource?
Thanks
jon