How control the pipelines concurrency?

Hi, I was using Gitlab Runner 11.2 to analyze code, I have tried to change global section ‘concurrent’, [[runners]] section ‘request_concurrency’ and ‘limit’ in the config.toml file to control the pipelines concurrency.

There are 5 runners registered in my config.toml for 5 different gitlab project, it works well when I commit code from different project.
But there are some problem when I commit code simultaneously with same branch: the jobs run in same directory.

When config like this:

concurrent = 4
check_interval = 0

[[runners]]
  request_concurrency = 1

and simultaneously commit three times with same branch, the jobs run in different directory with location root/builds/…/0 1 2.

When config like this:

concurrent = 1
check_interval = 0

[[runners]]
  request_concurrency = 1 or >1

and simultaneously commit three times with same branch, the jobs still run in same directory with location root/builds/…/0.

The global jobs number dose limited by ‘concurrent’, but ‘request_concurrency’ seems not work.

How to understand ‘concurrent’ , ‘request_concurrency’ and ‘limit’ configuration?
How to config ‘concurrent’ and ‘request_concurrency’ to control single branch simultaneously commits run in serial, or it’s there another way to do so?

Thanks a lot!