The information whether a function can be called in the Controller thread, the Processor thread, or in both threads, can be found on the Reference pages below the description of each function.
It looks like this:
Script Error - Wrong Thread
If you call a function in the wrong thread, the script module will output an error message.
The output message for the script error of the above example looks like this:
If this ever happens to you, please review your code and try to place the function call elsewhere in your script, for example. Alternatively, you could use runAsync.
By calling runAsync in the Processor thread you can invoke a function that is executed in the Controller thread. The execution of runAsync takes at least one audio block, or longer, depending on the function that was called. The callback that called runAsync is put on hold until the function has completed. Please be aware of this when using runAsync.
By calling runSync in the Controller thread, you can invoke a function that is executed in the Processor thread. For example, by calling runSync in a parameter change callback, you can invoke an event function like playNote, releaseVoice, controlChange, etc. The callback that called runSync is not stopped and continues its execution. The specified function will be exectued in the next audio block.