Note on Concurrency: Processes and Threads
1. Key Concepts
- Concurrency involves two main components: Processes and Threads.
2. Processes
- A process is an instance of a running program, i.e., the execution of a program.
- Example: Different processes can be seen running simultaneously on your computer for the programs you are using.
- Characteristics:
- Isolated: Each process has its own private memory space.
- No data sharing: Processes do not share data with other processes.
- Resource-heavy: Processes consume more resources, especially if they are “heavyweight.”
- Managed by CPU/OS: The CPU and operating system can run multiple isolated processes at the same time (also referred to as “programs”).
3. Threads
- A thread is a part of execution inside a program or a “subprocess.”
- It executes a specific piece of code.
- Multiple threads can run concurrently within a single program.
- Characteristics:
- Shared resources: Threads share data and memory with other threads within the same process.
- Lightweight: Threads consume fewer resources compared to processes.
- Concurrency implementation: Threads enable programmers to implement concurrency in applications.
- Example: In a product lookup program:
- One thread fetches data from the database.
- Another thread handles the user interface.
- This allows query execution to occur while the application remains responsive to user input.
- Example: In a product lookup program:
- Multithreading: Switching between threads happens very quickly, enabling efficient program execution.
4. Comparison: Processes vs. Threads
Aspect | Process | Thread |
---|---|---|
Definition | An isolated instance of a running program. | A part of execution within a program. |
Memory | Private memory space; no sharing. | Shares memory and data with other threads. |
Resource Usage | Heavyweight; consumes more resources. | Lightweight; consumes fewer resources. |
Concurrency | Managed by the OS/CPU. | Enables concurrent tasks within a program. |
Example | Running multiple apps (e.g., browser, editor). | Concurrent tasks in one app (e.g., UI rendering, data fetching). |
5. Practical Example
- A program may spawn multiple threads to perform different tasks simultaneously:
- Thread 1: Renders the User Interface (UI).
- Thread 2: Fetches data from the database.
- Thread 3: Handles file uploads.
- These threads operate within the same process, sharing memory and resources efficiently.
6. Summary
- Processes are isolated executions of programs, managed by the OS/CPU, and are resource-intensive.
- Threads are lightweight units of execution within a process, enabling concurrency and efficient resource usage.
- Multithreading allows fast switching between threads, making program execution more efficient.
Key Takeaway: Processes provide isolation but are resource-heavy, while threads enable efficient concurrency within a process by sharing resources.