Thursday, December 28, 2017

The real difference between Process and Thread in Java

One of the common questions from programming interviews is, what is the difference between a Thread and a Process? Well, the main difference between them is that a Process is a program that is executing some code and a thread is an independent path of execution in the process. A process can have more than one thread for doing independent task e.g. a thread for reading data from disk, a thread for processing that data, and another thread for sending that data over the network. This technique to improve throughput and better utilize CPU power is also known as multi-threading.

Technically, the most significant difference between thread is to address space and context switching. All threads from a process share the same address space but a process has its own address space. Similarly, context switching between process is more expensive than context switching between threads.

And, if you are serious about mastering Java multi-threading and concurrency then I also suggest you take a look at the Java Multithreading, Concurrency, and Performance Optimization course by Michael Pogrebinsy on Udemy. It's an advanced course to become an expert in Multithreading, concurrency, and Parallel programming in Java with a strong emphasis on high performance

Thread vs Process

Let's analyze some more difference between a Thread and a process in a programming language like Java or from operating system perspective:



1. Address Space

All threads from the same process share memory space of the process that created it, on the other hand, each process has its own address space.


2. Communication

Threads can directly communicate with other threads of the same process. Many programming languages e.g. Java provide tools for inter-thread communication. It's much cheaper than inter-process communication, which is expensive and limited.


3. Overhead

Threads have less overhead compared to Process in terms of metadata, context switch, and CPU and memory requirement.


4. Data Segment

Thread have direct access to the data segment of its process, an individual process has its own copy of the data segment of the parent process. See the difference between Stack and heap for more details.


5. Creation

New threads can be easily created e.g. in Java you can create a new thread by creating an object of Thread class and calling start() method on it, while a new process requires duplication of the parent process.


6. Behavior

Changes to the parent thread e.g. cancelation, priority, the daemon may affect the behavior of the other threads of the process, but changes to the parent process do not affect the child process.


7. Existence

A thread cannot exist without process. Also, a process, at least, has one thread to do the job e.g. main thread for Java programs


8. Context Switching

Since all threads from the same process share the same address space, inter-thread communication and context switching between them are much faster than inter-process communication and context switching between the process.

These were some fundamental differences between thread and process which every programmer should know. If you don't then I suggest you must read Java Threads By Scott Oaks, one of the great introductory books on multithreading.




Similarities between Process and Thread

Both Thread and process shares lot of similarity in the sense that both executes code, both has ID, execution time, based priority and exit status. Both can create another process and thread as well, but the thread has a greater degree of control over other threads of the same process. The process only has control over child process.

There is a saying that one image is equal to 1000 words, here is one diagram which will help you learn the difference between thread and process clearly:

Difference between thread and process in Java


That's all about the difference between a Thread and process in the operating system and Java or any other programming language. Threads are lightweight, an independent path of execution in the process. They share the same address space of the process and less overhead compared to the process. The process is an individual program, require their own address space and has more overhead than threads. Also, the difference between Thread and process depends upon operating system implementation. For example, there is very little difference between a thread and a process in Linux than Windows.

Further Learning
Multithreading and Parallel Computing in Java
Java Concurrency in Practice - The Book
Applying Concurrency and Multi-threading to Common Java Patterns
Java Concurrency in Practice Course by Heinz Kabutz


2 comments :

Post a Comment