Dispatch Sources are objects that allow the client to register blocks or functions to execute asynchronously upon system events, such as a socket or file descriptor being ready for reading or writing, or a POSIX signal.
Dispatch Semaphores are objects that allow a client to permit only a certain number of tasks to execute concurrently.