I will give you an analogy.
Imagine a line at a street vendor where people join the end of the line and receive service from the front. When each person is served, the remaining people in the line are shuffled forward (usually muttering about how long they take him), and new people join in at the end. In this example, people have to move forward so that others can join this line, otherwise the end of the queue will always move away from the provider. Thus, in this example, the server remains at the front of the queue and deals with who is at the front or no one.
Now imagine that people did not move, but instead of serving the head of the line, the seller himself moved further in turn, actually moving to where the head of the line is. After all, after serving 100 people, the server is halfway down the street, and after 500 the server is now on the next street, etc .... where does it stop?
Thus, for convenience, the seller compares a large closed area where people can always join the end of the line, and he always moves on to the next person, but the line remains in one place. He simply bypasses the line, serving people. Of course, he can only serve people in line, but provided that he makes it big enough, and he can keep up with demand, and he does not need to move away from his designated trading zone.
Taking this analogy back to computers ... in the first example there is a queue manager, and as items are serviced, it moves items along the buffer. In the second example, the program runs until more memory is added to add the array = fixed size (defined or limited by a space). In the third example, the server moves to the main queue of the queue, like the second, but the array is fixed, and only the number of elements can join the queue, but they will still be served by FIFO.
tl; dr: efficient resource management.