This document discusses various models for handling concurrency including actors, mutexes/locks, software transactional memory (STM), communicating sequential processes (CSP), futures/promises, coroutines, and evented I/O. It describes the execution, scheduling, and communication mechanisms of each model and compares their pros and cons. Key points covered include the differences between concurrency and parallelism, atomicity problems with shared memory, advantages of message passing over shared memory, and event-driven non-blocking I/O can scale well compared to spawning many threads.