Concurrency is defined as the number of in-flight requests your Lambda Function is handling at the same time.
If a Lambda is invoked multiple times before an invocation has returned, additional functions are initialised - up to the burst limit (3000 , 1000 or 500 depending or region) or account limits.
If concurrency limit is exceeded you will start getting a Rate exceeded Error and 429 TooManyRequestsException.
Reserved concurrency guarantees the max number of concurrent instances that can be invoked (basically you are making sure that whatever happens at account level, maybe other functions are eating up the available concurrency quotas, your function will have at least some instances reserved ) - no charge involved.
Provisioned concurrency on the other end, initialises a requested number of execution environments so that they are prepared to respond immediately when your function is invoked. this incurs costs.
Invocation Models