### epicsThreadGetCPUs and callbackParallelThreads On systems that support it (e.g. recent Linux systems), `epicsThreadGetCPUs()` now takes the current cpu affinity mask of the calling thread into acount. That fixes the problem that an IOC which was started with a limited affinity mask (e.g. using `taskset`) and that called `callbackParallelThreads` with an argument of 0 in the startup script, had started more parallel callback threads than it has CPU cores available. The iocsh function `callbackParallelThreads` now also accepts positive or negative percentages for `count`, referring to the availabple number of cores and always rounding the number of used cores down with a minimum of 1. #### Examples ```text # use up to 25% of available cpu cores for callback threads callbackParallelThreads 25% # keep at least 10% of available cpu cores unused for callback threads callbackParallelThreads -10% ```