What is Multithreading? Multithreading is a model of program execution that allows for multiple threads to be created within a process, executing independently but concurrently sharing process resources.
1. Why Are You Interested In This Role?
“To start with, I am a big fan of multithreading and that is what I do most of my time. I must say that I want to be part of the team that is helping your company get the best information technology services that will aid your company to achieve its goals. And, I am a person who likes learning from others as well. Since I am still young and energetic, I want to improve my skills too by learning and gaining more experience in this field as well. I will be happy to offer my skills to you and learn from you as well. In fact, success comes from finding win-win solutions!”
2. Explain The Architecture Of Multithread Process?
In the case that both components A and B support multi-thread processing,
- Component A: Partitions the data to be read depending on its size or the number of CPU cores.
- Component B: Reads the data partitioned by Component A with multiple threads and generates the result data meanwhile.
- Component B: Collects the result data of multiple threads and outputs it as a whole.
In the case that only component A supports multi-thread processing,
- Component A: Partitions the data to be read depending on its size or the number of CPU cores.
- Component A: Collects the result data of multiple threads and passes it over to component B as a whole.
- Component B: Receives the data from component A and generates the result data.
- Component B: Outputs the result data.
In the case that only component B supports multi-thread processing,
- Component A: Reads the entire data.
- Component A: Passes over the read data to component B.
- Component B: Receives the data from component A, partitions the data depending on its size or the number of CPU cores, and generates the result data in multiple threads.
- Component B: Collects the result data of multiple threads and outputs it as a whole.”
3. What Are The Main Characteristics Of Multithreading?
- In the multithreading process, each thread runs parallel to the other.
- Threads do not allow you to separate the memory area. Therefore it saves memory and offers a better application performance.”
4. What Are The Common Advantages Of Multithreading?
· Threads share the same address space
· Threads are lightweight and has a low memory footprint
· The cost of communication between threads is low.
· Access to memory state from another context is easier
· It allows you to make responsive UIs easily
· An ideal option for I/O-bound applications
· Takes lesser time to switch between two threads within the shared memory and time to terminate
· Threads are faster to start than processes and also faster in task-switching.
· All Threads share a process memory pool that is very beneficial.
· Takes lesser time to create a new thread in the existing process than a new process.”
5. What Are The Disadvantages Of Multithreading?
· Complex debugging and testing processes
· Overhead switching of context
· Increased potential for deadlock occurrence
· Increased difficulty level in writing a program
· Unpredictable results
6. What Are The Main Approaches Of Multithreading?
“There are two main approaches to multithreading – Fine-grained and Coarse-grained.
· Fine-grained multithreading switches between threads on each instruction, causing the execution of multiple threads to be interleaved. This interleaving is normally done in a round-robin fashion, skipping any threads that are stalled at that time. In order to support this, the CPU must be able to switch threads on every clock cycle. The main advantage of fine-grained multithreading is that it can hide the throughput losses that arise from both short and long stalls since instructions from other threads can be executed when one thread stalls. But it slows down the execution of the individual threads since a thread that is ready to execute without stalls will be delayed by instructions from other threads.
· Coarse-grained multithreading switches threads only on costly stalls, such as level two cache misses. This allows some time for thread switching and is much less likely to slow the processor down since instructions from other threads will only be issued when a thread encounters a costly stall. Coarse-grained multithreading, however, is limited in its ability to overcome throughput losses, especially from shorter stalls. This limitation arises from the pipeline start-up costs of coarse-grain multithreading. Because a CPU with coarse-grained multithreading issues instructions from a single thread, when a stall occurs, the pipeline must be emptied or frozen and then fill in instructions from the new thread. Because of this start-up overhead, coarse-grained multithreading is much more useful for reducing the penalty of high-cost stalls, where pipeline refill is negligible compared to the stall time.
7. Talk About Simultaneous Multithreading.
“This is a variant on multithreading. When we only issue instructions from one thread, there may not be enough parallelism available and all the functional units may not be used. Instead, if we issue instructions from multiple threads in the same clock cycle, we will be able to better utilize the functional units. This is the concept of simultaneous multithreading. We try to use the resources of multiple issues, dynamically scheduled superscalar to exploit TLP on top of ILP.”
8. What Is Multiprocessing?
“Multiprocessing is the running of two or more programs or sequences of instructions simultaneously by a computer with more than one central processor.”
9. What Are The Main Differences Between Multithreading And Multiprocessing?
- A multiprocessing system has more than two processors whereas Multithreading is a program execution technique that allows a single process to have multiple code segments
- Multiprocessing improves the reliability of the system while in the multithreading process, each thread runs parallel to the other.
- Multiprocessing helps you to increase computing power whereas multithreading helps you create computing threads of a single process
- In Multiprocessing, the creation of a process is slow and resource-specific whereas, in Multiprogramming, the creation of a thread is economical in time and resource.
- Multithreading avoids pickling, whereas Multiprocessing relies on pickling objects in memory to send to other processes.
- Multiprocessing system takes less time whereas for job processing a moderate amount of time is taken.”
10. What Are The Benefits Of Multiprocessing?
- The biggest advantage of a multiprocessor system is that it helps you to get more work done in a shorter period.
- The code is usually straightforward.
- Takes advantage of multiple CPU & cores
- Helps you to avoid GIL limitations for CPython
- Remove synchronization primitives unless if you use shared memory.
- Child processes are mostly interruptible/killable
- It helps you to get work done in a shorter period.
- These types of systems should be used when very high speed is required to process a large volume of data.
- Multiprocessing systems save money compared to single processor systems as processors can share peripherals and power supplies.”
11. What Is A Thread?
“Threads are the virtual components or codes, which divides the physical core of a CPU into virtual multiple cores. A single CPU core can have up to 2 threads per core.”
12. Talk To Us About Process.
“A process is an instance of a program that is being executed. When we run a program, it does not execute directly. It takes some time to follow all the steps required to execute the program, and following these execution steps is known as a process. A process can create other processes to perform multiple tasks at a time; the created processes are known as clone or child processes, and the main process is known as the parent process. Each process contains its own memory space and does not share it with the other processes. It is known as the active entity. A typical process remains in the below form in memory.”
13. What Are The Key Differences Between Process And Thread?
· A process is independent and does not contained within another process, whereas all threads are logically contained within a process.
· Processes are heavily weighted, whereas threads are light-weighted.
· A process can exist individually as it contains its own memory and other resources, whereas a thread cannot have its individual existence.
· A proper synchronization between processes is not required. In contrast, threads need to be synchronized in order to avoid unexpected scenarios.
· Processes can communicate with each other using inter-process communication only; in contrast, threads can directly communicate with each other as they share the same address space.
14. Why Would You Describe Thread Behaviour As Unpredictable?
“Thread behavior is unpredictable because the execution of Threads depends on Thread scheduler, thread scheduler may have a different implementation on different platforms like Windows, UNIX, etc. Same threading program may produce different output in subsequent executions even on the same platform.”
15. What Are The Rules For Designing Multithreaded Applications?
· Identify Truly Independent Computationsm – You can’t execute anything concurrently unless the operations that would be executed can be run independently of each other.
· Implement Concurrency at the Highest Level Possible – There are two directions you can take when approaching the threading of a serial code. These are bottom-up and top-down. When initially analyzing your code, you are looking for the computational hotspots that account for the most execution time. Running those portions in parallel will give you the best chance of achieving the maximum performance possible.
· Plan Early for Scalability to Take Advantage of Increasing Numbers of Cores – Scalability is the measure of an application’s ability to handle changes, typically increases, in system resources (e.g., number of cores, memory size, bus speed) or data set sizes. In the face of more cores being available, you must write flexible code that can take advantage of different numbers of cores.
· Make Use of Thread-Safe Libraries Wherever Possible – If your hotspot computations can be executed through a library call, you should strongly consider using an equivalent library function instead of executing handwritten code.
· Use the Right Threading Model – If threaded libraries are insufficient to cover all the concurrency of an application and you must employ user-controlled threads, don’t use explicit threads if an implicit threading model (e.g., OpenMP or Intel Threading Building Blocks) has all the functionality you need. Explicit threads do allow for finer control of the threading implementation.
· Use Thread-Local Storage Whenever Possible or Associate Locks to Specific Data – Synchronization is overhead that does not contribute to the furtherance of the computation, except to guarantee the correct answers are produced from the parallel execution of an application.
· Dare to Change the Algorithm for a Better Chance of Concurrency – For comparing the performance of applications, both serial and concurrent, the bottom line is wall clock execution time. When choosing between two or more algorithms, programmers may rely on the asymptotic order of execution. This metric will almost always correlate with an application’s relative performance to another.
· Never Assume a Particular Order of Execution – With serial computations, it is easy to predict the statement that will be executed following any other statement in a program. On the other hand, the execution order of threads is nondeterministic and controlled by the OS scheduler. This means that there is no reliable way of predicting the order of threads running from one execution to another, or even which thread will be scheduled to run next.
16. What Is A Thread Pool?
“A thread pool is a software design pattern for achieving concurrency of execution in a computer program.”
17. What Is A Race Condition?
“A race condition is an undesirable situation that occurs when a device or system attempts to perform two or more operations at the same time, but because of the nature of the device or system, the operations must be done in the proper sequence to be done correctly.”
18. What Is Synchronization?
This is the action of causing a set of data or files to remain identical in more than one location.
19. What Is Context Switching?
Context Switching involves storing the context or state of a process so that it can be reloaded when required and execution can be resumed from the same point as earlier
20. What Is Time Slicing?
“It is the timeframe for which process is allotted to run in preemptive multitasking CPU.”
21. What Is Thread Starvation?
“Starvation describes a situation where a thread is unable to gain regular access to shared resources and is unable to make progress.”
22. How Can You Tell If There Is Thread Starvation?
“When thread starvation occurs, all threads of the dispatcher’s thread pool are blocking e.g. doing IO, delaying other work for indefinite periods of time. The symptoms of thread starvation are usually increased latency (despite low CPU usage), timeouts, or failing Akka Remote connections.”
23. Can You Describe Deadlock Situation?
“Deadlock is a situation where a set of processes are blocked because each process is holding a resource and waiting for another resource acquired by some other process.’’
24. What Can Happen When A Livelock Occurs?
“Livelock occurs when two or more processes continually repeat the same interaction in response to changes in the other processes without doing any useful work.’’
25. What Is A Deamon Thread In Java?
“Daemon thread in Java is a low-priority thread that runs in the background to perform tasks such as garbage collection. Daemon thread in Java is also a service provider thread that provides services to the user thread.’’
Multithreading is a challenging career but you must show your interviewer that you are capable of working them out as soon as you can. Answer the questions with confidence, straight to the point, and you will pass the interview. All the best.