|
Boost Users : |
Subject: Re: [Boost-users] [asio] io_service threadpool performance
From: Oliver Seiler (oseiler_at_[hidden])
Date: 2009-03-17 16:39:50
On Fri, Mar 13, 2009 at 2:32 PM, Rutger ter Borg <rutger_at_[hidden]> wrote:
>
> Dear all,
>
> I have been testing asio's io_service in a threadpool setup for job
> dispatching. However, it seems as if adding threads doesn't improve
> performance; perhaps even the opposite with 1 thread having the best
> performance.
Someone more familiar with the implementation could comment, but just poking
around through the implementation it appears there is one queue of handlers
that will get shared by all threads; right there I think there'll be a
lot of lock contention
between threads on the single queue.
I tried translating this example to Intel's TBB library, and start to
see concurrency
effects as I move up beyond 8 threads on my quad-core box (using parallel_for
with a blocked_range that results in a single call to f per task).
Increasing the
amount of work done on a given task (by increasing the size of the blocked_range
to parallel_for) speeds the run-time greatly, presumably because of the reduced
number of tasks and reduced context switching.
I'm guessing that the asio io_service isn't really geared towards
effective use of
multi-core CPUs where you're trying to schedule a large number of small
computational tasks; I'll go out on a limb and say that this *wasn't* the intent
of the library (as the name somewhat implies).
Not sure if that was helpful, but it let me play around with TBB,
which seems very
nice.
Cheers
Oliver
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net