By design, "Refresh Identity Cube" task builds a list of identities and processes each identity according to the selected option(s). The design queues each targeted identity to a worker thread pool. A worker thread pulls and actually processes the identity. Task execution time grows as the target list gets larger.
As a tuning option, each refresh task object sets the size of the worker pool. Each identity refresh task can spawn multiple worker threads. Each execution builds a (new) pool (except for group-only refreshes which don't use a pool at all). Increasing worker pool threads significantly improves the task duration in many scenarios.
The "hidden" task attr "refreshThreads" resides in the object map list, with a numeric value for the pool size (default value is '1'):
<entry key="refreshThreads" value="5"/>
The identity refresh worker thread pool is separate from the (Quartz) scheduler thread pool. The refresh worker pool ties to a dedicated/private queue, based on user and task names. To trace a refresh worker pool, then enable debug log4j on: