> I think what counts is the number of jobs/tasks which can be executed by
> one node at a given time. I think this should be configurable within ignite.
>
> Here's my use case. We want to run a distributed computation using a
> third-party tool which, when executed, takes an entire CPU core. We'll wrap
> that execution in Java in an Ignite task/job (sorry, I alwas forget which
> is which). On a multi-core machines we'd like to be able to run N-X tasks
> simultaneously where N is a number of cores and X is 1 or 2 (for 4-core or
> >8-core machines) reserved for administrative/management tasks. Like, 14
> cores for a 16-core machine.
>
> At the moment my understanding is that we'll need to start N-X nodes per
> server, to handle N-X jobs/tasks at once, correct?
>

You do not need to start multiple nodes in order to achieve multi-threaded
job execution. By default Ignite will run tasks in parallel in the public
thread pool of a fixed size in the order in which they arrive on a node.
The default number of threads in this pool is 2*number of cores reported by
Runtime#availableProcessors(). So if you do need any fancy job execution
ordering or job stealing, it will be enough to set the number of threads in
the public thread pool to N-X (see
IgniteConfiguration#setPublicThreadPoolSize).

If you want a more fine-grained control over how jobs are executed, you
might want to use one of the CollisionSPIs shipped with Ignite, for
example, PriorityQueueCollisionSpi or JobStealingCollisionSpi, or implement
your own collision SPI.

Hope that helps,
Alexey

Reply via email to