On Mon, Jan 5, 2009 at 10:10 PM, Mark Volkmann
<r.mark.volkm...@gmail.com> wrote:
>
> I think I read somewhere that the number of threads in the thread pool
> used by agents is based on the number of processors available. Is it
> exactly that number?

Agents currently use one of two thread pools.  'send' uses
pooledExecutor and 'send-off' uses soloExecutor.  Those are defined
here:

http://code.google.com/p/clojure/source/browse/trunk/src/jvm/clojure/lang/Agent.java?r=1194#25

You can see that currently pooledExecutor is capped at number of CPUs
plus 2, but I wouldn't bet too heavily on that particular formula.

> Is that the number of threads per agent of the total number of
> threads?

I'll assume you mean "or" instead of "of".  Each agent only executes
at most one action at a time, so having multiple threads per agent
doesn't make sense.  If you send multiple actions to a single agent,
the actions queue up.  If you 'send' lots of actions to more than
CPUs+2 agents, the agents queue up waiting for an available thread.

This is why it's important not to block for IO or for other threads
while in a 'send' action, because it can cause other agents to wait
unnecessarily.  In those cases you should instead use 'send-off'.
Each agent will still only do one action at a time, but the
soloExecutor pool will grow as needed to give a thread to every agent
that has an action queued.

--Chouser

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To post to this group, send email to clojure@googlegroups.com
To unsubscribe from this group, send email to 
clojure+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to