Communications are expensive since they usually take long. Workstation clusters usually use Ethernet for communication. Even for parallel computers which equip with special high speed communication channels, the communications are still far slower than computing. Parallel code with much communications may run slower than sequential code. Communications also imply synchronizations.
Synchronization means idle and wait.
If one node finishes its computation early, then it needs to wait for the data it needs from other slower nodes to continue its computing. All faster nodes need to wait for slower nodes for some time especially in global operations. Unfortunately, parallel programs usually need to synchronize all nodes to make sure everybody has reached some check points or has received all data it needs before they can start a new stage of computing. Only tightly coupled computation nodes with highly load balanced code can minimize the synchronization idle. Unless the communication and synchronization time is very small, fine grain codes is not worthy for parallelization.