multithreading vs multiprocessing c++
This tutorial focuses on multi-threading rather than multi-processing, though most of the concepts discussed are common to all concurrency. Let's compare these two forms of concurrency. If you're not interested, feel free to skip to the next section.
Multi-threading refers to an application with multiple threads running within a process, while multi-processing refers to an application organized across multiple OS-level processes. According to Wikipedia "Multiprocessing is the use of two or more central processing units (CPU's) within a single computer system. The term also refers to the ability of a system to support more than one processor and/or the ability to allocate tasks between them. There are many variations on this basic theme, and the definition of multiprocessing can vary with context, mostly as a function of how CPU's are defined (multiple cores on one die, multiple dies in one package, multiple packages in one system unit, etc.)."
A thread is a stream of instructions within a process. Each thread has its own instruction pointer, set of registers and stack memory. The virtual address space is process specific, or common to all threads within a process. So, data on the heap can be readily accessed by all threads, for good or ill.
Multi-threading is a more "light weight" form of concurrency: there is less context per thread than per process. As a result thread lifetime, context switching and synchronization costs are lower. The shared address space (noted above) means data sharing requires no extra work.
Multi-processing has the opposite benefits. Since processes are insulated from each other by the OS, an error in one process cannot bring down another process. Contrast this with multi-threading, in which an error in one thread can bring down all the threads in the process. Further, individual processes may run as different users and have different permissions.
Subsequent sections introduce some common problems with multi-threaded code, and solves them using low-level synchronization constructs.