Efficient algorithms for asynchronous multiprocessor systems must achieve a balance between low process communication and high adaptability to variations in process speed. Algorithms that employ problem decomposition may be classified as static (in which decomposition takes place before execution) and dynamic (in which decomposition takes place during execution). Static and dynamic algorithms are particularly suited for low process communication and high adaptability, respectively. For static algorithms the following analysis techniques are presented: finding the probability distribution of execution time, deriving bounds on mean execution time using order statistics, finding asymptotic mean speedup, and using approximations. For dynamic algorithms the technique of modeling using a queueing system is presented. For each technique, an example application to parallel sorting is given.