Further to Vlad, you would set up testing environment(s) for each branch. CI would then be configured to push changes made to branch A to Test A and Branch B to Test B.
A branch can contain between 1 and n features. The fewer you have in a branch, the less impact if it slips.
The changes stay in their branches until they are ready to releasehave been released.
Once Release A has been made you would merge the new Main (containing release A) into Branch B and continue working on Release B.
The only limit to the number of branches you can run simultaneously is your team/infrastructure. One dev can theoretically be assigned more than one feature isolated in separate branches simultaneously. Do I recommend doing that? Probably not. Finish one job at a time. If however there's a change in priorities, a branch can be parked while another one is worked on.