In my example - I had 8 schedulers available but the 24 represents the threads reserved for the execution of the query (lifetime of the query).
Regarding queries sometimes not using all available CPUs, there are a few different areas to examine or consider.
The costing uses half of the available schedulers as an assumption. For example, in my article the costing was based on 4 but executed with 8. Feel free to share your specifics here and we can discuss further.