In 1967 Amdahl proposed what appeared to be a fundamental limit to how fast you can make your concurrent code: the performance improvement to be gained from using a faster mode of execution is limited by the fraction of time the faster mode can be used.
According to Amdahl, the speedup of a programme using multiple processors in parallel computing is limited by the time needed for the sequential fraction of the programme. If 90% of the programme can be parallelised the theoretical maximum speedup would be 10x, no matter how many processors are used.

The diagram shows Amdahl's speedup factors based on different percentages of parallelisation across a number of processors.
This implies that there is little point in developing applications to exploit manycore capabilities, other than for a few "embarrassingly parallel" patterns and problems with no sequential work at all. Amdahl analysed the effect on execution time as we add processors on the same workload.
In 1988 Gustafson argued that Amdahl's law does not do justice to massively parallel machines because they enable computations previously impossible within the given time constraints. A machine with greater parallel computation ability lets computations operate on larger data sets in the same amount of time, so Amdahl's assumptions don't match the way programmers use parallel processors. The impact of Gustafson's argument was to shift development to select or reform problems so that solving a larger problem in the same amount of time would be possible. In particular he redefines efficiency as a need to minimise the sequential part of a programme, even if this increases the total amount of computation.