Let's say I have 3 triggers. One runs 1.0 second, one runs every 2.0 seconds, and one runs every 3.0 seconds. Performance-wise, is it better for these to be separated out into 3 separate triggers with conditions or combined into 1 trigger that runs every second with a check for "(Mission Time) mod 3 == 0" for example with a call to run the trigger that's supposed to run every 3 seconds?
Just because it forms one thread, why does that necessarily mean it is better performance? I realize that reducing threads will mitigate concurrent thread limit error ("Too Many Threads"), but performance-wise can you explain why combining triggers is better? Thanks.
Starcraft 2 runs "one single game loop" because it is modeling a time-sequential game world. Not sure what you mean by "what it needs".
Let me be more clear: There is a given number of If-Then statements for the system to go through when evaluating the conditions for a group of triggers. Whether these are run sequentially in a single "thread" vs in separate "threads" (and I think we can assume Blizzard "threads" are not actually processor threads but are instead handled more like a unix timesharing system), there is still a set number of operations to complete. It seems to me that either configuring these in a single trigger or multiple will result in the same exact operations being run at the lowest level of operation, thereby resulting in equivalent runtime (ie equivalent performance). Of course, I don't know enough about the underlying SC2 engine to be sure, but this seems logical to me. Can you explain where I am wrong?
You are not wrong persay, but not right either, as am I ... there is no clear answer in this conversation. Whilst it would be more threads, 2 more will not break the map, nor will you notice any lag or issues. However, whilst being in a single periodic event, you can choose in which order which functions get called. For instance, my whole engine runs off a single periodic event, and everything being called from there when it is needed. I have everything set up in a particular order because mechanics need to be called before the UI functions, etc. I would believe that nearly all games run off a single game loop, because it is paramount to maintain control and clarity over the code, so, if for no other reason, it is a good habit to get into if you are ever going to expand beyond Sc2, ie, into C.
Stuff like this will not cause your map to perform badly except if you have so many of them (100+ triggers) that you probably should question why you need so many in the first place.
If the 3 triggers do make your pc lag it is because of the heaviness of the actions in the trigger, not because it's 1 or 3 threads.
From my understanding, it is exactly the way Dogmai says: The difference in performance is negligible, so you choose by other priorities. A single game loop uses less threads towards the thread counter and offers more control. You might need additional if-statements, but those are lightning-fast in galaxy anyway.
Let's say I have 3 triggers. One runs 1.0 second, one runs every 2.0 seconds, and one runs every 3.0 seconds. Performance-wise, is it better for these to be separated out into 3 separate triggers with conditions or combined into 1 trigger that runs every second with a check for "(Mission Time) mod 3 == 0" for example with a call to run the trigger that's supposed to run every 3 seconds?
One, less threads.
@DogmaiSEA: Go
Just because it forms one thread, why does that necessarily mean it is better performance? I realize that reducing threads will mitigate concurrent thread limit error ("Too Many Threads"), but performance-wise can you explain why combining triggers is better? Thanks.
Why does Starcraft 2 run one single game loop instead of running many depending on what it needs?
@DogmaiSEA: Go
Starcraft 2 runs "one single game loop" because it is modeling a time-sequential game world. Not sure what you mean by "what it needs".
Let me be more clear: There is a given number of If-Then statements for the system to go through when evaluating the conditions for a group of triggers. Whether these are run sequentially in a single "thread" vs in separate "threads" (and I think we can assume Blizzard "threads" are not actually processor threads but are instead handled more like a unix timesharing system), there is still a set number of operations to complete. It seems to me that either configuring these in a single trigger or multiple will result in the same exact operations being run at the lowest level of operation, thereby resulting in equivalent runtime (ie equivalent performance). Of course, I don't know enough about the underlying SC2 engine to be sure, but this seems logical to me. Can you explain where I am wrong?
You are not wrong persay, but not right either, as am I ... there is no clear answer in this conversation. Whilst it would be more threads, 2 more will not break the map, nor will you notice any lag or issues. However, whilst being in a single periodic event, you can choose in which order which functions get called. For instance, my whole engine runs off a single periodic event, and everything being called from there when it is needed. I have everything set up in a particular order because mechanics need to be called before the UI functions, etc. I would believe that nearly all games run off a single game loop, because it is paramount to maintain control and clarity over the code, so, if for no other reason, it is a good habit to get into if you are ever going to expand beyond Sc2, ie, into C.
Stuff like this will not cause your map to perform badly except if you have so many of them (100+ triggers) that you probably should question why you need so many in the first place.
If the 3 triggers do make your pc lag it is because of the heaviness of the actions in the trigger, not because it's 1 or 3 threads.
From my understanding, it is exactly the way Dogmai says: The difference in performance is negligible, so you choose by other priorities. A single game loop uses less threads towards the thread counter and offers more control. You might need additional if-statements, but those are lightning-fast in galaxy anyway.