In software engineering, a bottleneck occurs when the capacity of an application or a computer system is limited by a single component, like the neck of a bottle slowing down the overall water flow.
Some examples of engineering bottlenecks that appear include the following: a processor, a communication link, and disk IO.
[2] A system or application will hit a bottleneck if the work arrives at a comparatively faster pace relative to other processing components.
It is impossible to remove bottlenecks completely since there is always a component that limits the overall performance, so the usual goal is to improve the bottleneck component so that the whole system can achieve the desired performance.
Reduction is achieved with the utilization of specialized tools such as performance analyzers or profilers, the objective being to make particular sections of code perform as effectively as possible to improve overall algorithmic efficiency.