Understanding Concurrent Tasks and System Thread Limits

Modified on Thu, 11 Dec, 2025 at 8:49 PM

Summary

Each processor has a Concurrent Tasks setting. This tells Clockspring how many parallel threads that processor is allowed to use. But increasing this number doesn’t guarantee the processor will actually get that many threads.

Clockspring has a global thread pool limit that caps how many threads the entire system can run at once.


You can see it here:
Hamburger Menu → Controller Settings → General → Maximum Timer Driven Thread Count


How these two settings interact

The key rule:

A processor can only use as many threads as the system has available, no matter what its Concurrent Tasks value is.

Example:

  • Global max threads: 10

  • Processor A: Concurrent Tasks 5

  • Processor B: Concurrent Tasks 5

  • Processor C: Concurrent Tasks 5

They collectively request 15, but the system will only run 10 at once.


One of those processors my sit idle until a thread frees up or processors will use less threads than configured.


This leads to common symptoms:

  • A processor set to 10 concurrent tasks only ever runs 2 or 3

  • Some processors appear “stalled”

  • High-throughput processors block lower-throughput ones

When to increase Concurrent Tasks

Use higher concurrency only when the processor can benefit from parallelism. Good fits:

  • InvokeHTTP hitting an API that supports parallel calls

  • SplitFlow → process fragments → JoinFlow patterns

  • Database writes using PutDatabaseRecord (if the target DB tolerates parallelism)

    • Note: Use MergeRecord before PutDatabaseRecord to group writes for efficiency

Bad fits:

  • Anything that hits a rate-limited API

  • Any processor that writes to a single file or resource that must remain serialized

  • Processes bound by a slow upstream source

When to increase the system thread count

You should only increase the global thread count if:

  • The host machine has enough CPU to handle more threads

  • Multiple processors need real parallel execution

  • You’ve confirmed the OS and JVM have enough headroom

If you raise Concurrent Tasks without raising the global thread pool, nothing changes.

Practical guideline

  • Start with Concurrent Tasks = 1 for most processors

  • Increase slowly and only when you actually see a bottleneck

  • Match the global thread pool to your expected parallel load, not the sum of all processor settings

  • Watch CPU. If you fully saturate it, the flow slows down anyway.

Quick test to see if you’re thread-limited

  1. Set two or three processors to high Concurrent Tasks values

  2. Start them at the same time

  3. Watch the Active Threads indicator in the top-right of the UI

If it caps out at the global limit and stays flat, then you’re thread-bound.

Was this article helpful?

That’s Great!

Thank you for your feedback

Sorry! We couldn't be helpful

Thank you for your feedback

Let us know how can we improve this article!

Select at least one of the reasons
CAPTCHA verification is required.

Feedback sent

We appreciate your effort and will try to fix the article