В современных реализациях UNIX и Linux у каждого процесса может быть несколько потоков выполнения. Потоки можно представить себе в качестве набора процессов, совместно использующих одну и ту же виртуальную память, а также ряд других атрибутов. Каждый поток выполняет один и тот же программный код и совместно с другими потоками использует одну и ту же область данных и кучу. Но каждый поток имеет свой собственный стек, содержащий локальные переменные и информацию о связанности вызовов функций.
Потоки могут осуществлять взаимный обмен данными через совместно используемые глобальные переменные. API для работы с потоками предоставляет условные переменные и мьютексы, являющиеся примитивами, позволяющими потокам процесса обмениваться данными и синхронизировать свои действия, в частности их использование общих переменных. Потоки могут также обмениваться друг с другом данными с применением IPC и механизмов синхронизации, рассмотренных в этой статье. Основным преимуществом использования потоков является упрощение обмена данными (через глобальные переменные) между сотрудничающими потоками. Кроме того, некоторые алгоритмы более естественно преобразуются в многопоточные реализации, чем в варианты использования нескольких процессов. Помимо этого, многопоточные приложения могут легко воспользоваться преимуществами параллельной обработки на многопроцессорном оборудовании.