Do different objects run in parallel and multithreaded during program execution?

For example, if I have a Player and Enemy object, will their Start, Awake, and Update functions run in parallel, multithreaded? Is there any way to control this?

No, by default all the code you write runs syncronously in the main thead. You can get multi-threading by using Unity’s Jobs system or ECS, but both are quite advanced topics.

The Start/Awake/Update functions of all instances of the same script will run right after each other. Then the functions of all the instances of the script next in line will run after that, etc.

To clarify, in the first frame, first all the Awake functions for all scripts will run, then all the Start functions will run, and then all the Update functions.

By default, the execution order of each script will be picked by Unity, seemingly at random. This order can also differ between editor and build so that’s good to keep in mind as it’s quite a common cause of dificult-to-find bugs.

You can however control the execution order of certain scripts manually from the project settings. Go to Project Settings > Script Execution Order.

As a tip, if you have logic where it’s important that the Update function of a certain script runs before a different script for example, rather than using the project settings, I find that it’s better to just use your own custom update functions and call them manually via a single manager class in the order you want.

Thank you!
If I really need asynchronous operations (training many AI models), which is better, Unity Jobs or ECS, and where can I find information?

Start with the Jobs system. Here’s some info on Unity’s website: Unity - Manual: Write multithreaded code with the job system

But you should probably watch a tutorial first at least to get your bearings.