In computer science, a **synchronizer** is an algorithm that can be used to run a synchronous algorithm on top of an asynchronous processor network, so enabling the asynchronous system to run as a synchronous network.

The concept was originally proposed in (Awerbuch, 1985) along with three synchronizer algorithms named **alpha**, **beta** and **gamma** which provided different tradeoffs in terms of time and message complexity. Essentially, they are a solution to the problem of asynchronous algorithms (which operate in a network with no global clock) being harder to design and often less efficient than the equivalent synchronous algorithms. By using a synchronizer, algorithm designers can deal with the simplified "ideal network" and then later mechanically produce a version that operates in more realistic asynchronous cases.

The three algorithms that Awerbuch provided in his original paper are as follows:

**Alpha synchronizer**: This has low time complexity but high message complexity.
**Beta synchronizer**: This has high time complexity but low message complexity.
**Gamma synchronizer**: This provides a reasonable tradeoff between alpha and beta by providing fairly low time and message complexity.
Since the original paper, other synchronizer algorithms have been proposed in the literature.