There are many issues to consider, but if everything plays nice, you can just put all in one loop and don't worry in which order things execute. The loop will repeat once everything in it is done. Add a small wait statement so it repeats at predictable intervals and does not consume all CPU spinning as fast as it can.
If things potentially don't play nice and e.g. one channel gets stuck for some reason and never finishes, everything will need to wait if you only have one loop. If each is in a independent loop, the others will be able to proceed.
I would suggest to use one loop for simplicity and simply ensure proper error and exception handling.
If you use multiple loops, you need to ensure that they gracefully take turns. This is achieved by placing a wait statement (even 0ms!) in EACH loop.