Functional decomposition divides the algorithm into independent tasks which can be processed simultaneously. If the data needed for the tasks is also independent, the division is perfect otherwise the communication will be considerable to avoid the repetitions of data. All tasks commence concurrently but some of the tasks will have to wait until data is obtainable.