Will Godot miss lines if you try run too many things at once?

  • Thread starter Darkmisc
  • Start date
  • Tags
    godot
In summary, running too many processes simultaneously in Godot can lead to missed lines or performance degradation. This is due to the engine's limitations in handling concurrent tasks, which may result in skipped frames or delayed execution of scripts. To maintain optimal performance, it's advisable to manage the workload effectively and avoid overwhelming the engine with excessive simultaneous operations.
  • #1
Darkmisc
220
31
TL;DR Summary
I have twelve buttons that are constantly moving. Sometimes they don't do what they are supposed to when pressed. Is it because I have too many things running simultaneously?
Hi everyone

I made a game for memorising Scrabble two-letter words. When you press a tile, it lights up and a button_on variable gets set to true. If the two tiles you press form a valid two-letter word, the tiles disappear (and get replaced with new tiles). I have 12 tiles running at any given time. The left column scrolls down and the right column scrolls up.

1702684245-931062-image.png


The game runs fine for the most part, but very occasionally when you press a pair of tiles that form a valid word, the tiles will light up but not disappear. (They will disappear if you press on the tile a second time)

I suspected it was because I was running too many functions at once, and maybe the button_on=true line gets missed. All the buttons belong to the "all_buttons" group and they all have a "word_made" function that gets called when a valid word is made. I gave each button its own group (i.e. one, two, three... twelve) and instead only called functions for two buttons whenever a word was made. This made the problem appear less frequently, but didn't eliminate it.

I also tried using physics_process instead of _process, but I'm not sure if this made any difference.

Am I correct in suspecting the problem stems from running too many things at once? I tried using only ten buttons, but that didn't eliminate the problem.

I had also labelled each button (not in screenshot) and kept a track of which pairs failed to light up. I've retried those pairs and they almost always work as intended.

Am I right in guessing that I'm running too many things at once? If so, can the problem be fixed?

Thanks
 
Technology news on Phys.org
  • #2
Darkmisc said:
Am I correct in suspecting the problem stems from running too many things at once?
That callbacks should be skipped entirely is not likely, but depending on what your are doing in your callbacks and how you implemented timed actions (GUI-thread timer or separate thread) you likely have a race conditions between button presses and timed actions. Since you say the program seems to miss clicks you may also want to look at you button enable/disable timing if you have any of those. Race conditions can in general be very subtle and difficult to pinpoint even when having the code in a debugger (because debugging usually alters the timing). The right amount of code tracing (logging when entering and leaving selected functions) may provide you with data for pinpointing the situation.

Also want to mention, that if your code firing events at a very high rate (e.g. a burst or a recursive update) you may experience a build up of events in the event queue where user interactions can get perceptively delayed.
 
  • Like
Likes Darkmisc

FAQ: Will Godot miss lines if you try run too many things at once?

Will Godot miss lines if you try to run too many things at once?

Godot will not miss lines of code if you try to run too many things at once. However, running too many processes simultaneously may cause performance issues and slow down the execution of your game.

Can Godot handle running multiple tasks concurrently without missing lines of code?

Yes, Godot is capable of handling multiple tasks concurrently without missing lines of code. It uses a single-threaded architecture with a main loop that processes input events, updates game logic, and renders frames in a sequential manner.

What happens if I overload Godot with too many tasks to run simultaneously?

If you overload Godot with too many tasks to run simultaneously, it may lead to performance degradation, dropped frames, and potential crashes. It is important to optimize your code and manage resources efficiently to prevent overloading Godot.

How can I prevent Godot from missing lines of code when running multiple tasks at once?

To prevent Godot from missing lines of code when running multiple tasks at once, you can use coroutines, threads, or asynchronous functions to handle concurrent tasks without blocking the main thread. This allows Godot to process tasks in parallel while maintaining the integrity of your code.

Is there a limit to the number of tasks that Godot can handle running simultaneously?

While there is no specific limit to the number of tasks that Godot can handle running simultaneously, the performance of your game may be affected if you try to run an excessive amount of tasks at once. It is recommended to monitor the performance of your game and optimize your code to ensure smooth execution.

Back
Top