Beruflich Dokumente
Kultur Dokumente
Hold on for a moment and tr y to answer the above queries and visualize the
concepts by yourself.
If you are like, “I am confused? ” Then we will have an awesome time in this discussion ؉
So let us check whether you have grasped it right. We would analyse and
understand what actually they are and their relationship between one another. We
will keep our discussion easy and concise.
You can sing or eat at a time not simultaneously. Don’t mind being Jerry ؉
Concurrency means executing multiple tasks at the same time but not necessarily
simultaneously. In a concurrent application, two tasks can start, run, and complete
in overlapping time periods i.e Task-2 can start even before Task-1 gets completed.
In the computer science world, the way how concurrency is achieved in various
processors is different. In a single core environment (i.e your processor is having a
single core), concurrency is achieved via a process called context-switching. If its a
multi-core environment, concurrency can be achieved through parallelism.
Execution of tasks in a single core environment. Tasks are context switched between one another.
Parallelism
Consider you are given two tasks of cooking and speaking to your friend over the
phone. You could do these two things simultaneously. You could cook as well as
speak over the phone. Now you are doing your tasks parallelly.
Two tasks are being performed simultaneously over the same time period.
Process
A process is an instance of a running program. A program can have multiple
processes. A process usually starts with a single thread i.e a primar y thread but
later down the line of execution it can create multiple threads.
Distribution of Processes and Threads in an application.
In a synchronous programming model, tasks are executed one after another. Each
task waits for any previous task to complete and then gets executed.
Asynchronous
Imagine you were given to make a sandwich and wash your clothes in a washing
machine. You could put your clothes in the washing machine and without waiting
for it to be done, you could go and make the sandwich. Here you performed these
two tasks asynchronously.
In an asynchronous programming model, when one task gets executed, you could
switch to a different task without waiting for the previous to get completed.
Synchronous and Asynchronous in a single and multi-
threaded environment
Synchronous
Single Threaded:
Each task gets executed one after another. Each task waits for its previous task to get executed.
Multi-Threaded:
Tasks get executed in di erent threads but wait for any other executing tasks on any other thread.
Asynchronous
Single Threaded:
Tasks start executing without waiting for a di erent task to nish. At a given time a single task gets
executed.
Multi-Threaded:
Tasks get executed in di erent threads without waiting for any tasks and independently nish o their
executions.
Summing up
Concurrency and Parallelism ->
Way tasks are executed.
Single Threaded – If we have couple of tasks to be worked on and the current system
provides just a single thread, then tasks are assigned to the thread one by one. It can be
pictorially depicted as
Here we can see that we have a thread (Thread 1 ) and four tasks to be completed. Thread
starts workingon the tasks one by one and completes all. (The order in which tasks will be
taken up, does not affect the execution, we can have different algorithm which can define the
priorities of tasks)
Multi-Threaded – In this environment, we used to have multiple threads which can take up
these tasks and start working on that. It means we have a pool of threads (new threads can
also be created based on the requirement and available resources) and bunch of tasks. So
these thread can work on these as
Here we can see that we have four threads and same number of tasks to complete. So each
thread takes up one task and completes that. This is an ideal scenario but in normal cases,
we used to have more number of tasks than the number of available threads. So, whichever
thread gets free, takes up another task. As already mentioned that spawning new thread is
not an option each time because it requires system resources like CPU, memory.
Now, Let’s talk about Asynchronous model and how does it behave in single and multi-
threaded environment.
Here we can see that a single thread is responsible to complete all the tasks and tasks are
interleaved to each other.
If our system is capable of having multiple threads then all the threads can work in
asynchronous model as well
Here we can see that same task say T4, T5, T6.. are handled by multiple thread. This is the
beauty of this scenario. As you can see that T4 was started first in Thread 1 and completed
by Thread 2. Similarly, T6 is completed by Thread 2, Thread 3 and Thread 4. It shows the
maximum utilization of the threads.
Concurrency
There are two things which are very important for any application – Usability and
Performance. Usability because say a user clicks on a button to save some data. This
requires multiple smaller tasks like reading and populating data in internal object, establishing
connection with SQL and saving it there etc. As SQL runs on another machine in network and
runs under different process, it could be time consuming and may take bit longer. So, if the
application runs on a single thread then the screen will be in hanged state till all the tasks
completes which is a very bad user experience. That’s why nowadays many applications and
new frameworks completely rely on asynchronous model.
Performance of an application is also very important. It has been seen that while executing a
request, around 70-80% of the time gets wasted while waiting for the dependent tasks. So, it
can be maximum utilized by asynchronous programming where once the task is passed to
another process (say SQL), current thread saves the state and available to take another task.
When the SQL task completes any thread which is free, can take it up further.
Asynchrony in ASP.NET
Async in ASP.NET can be a major boost in the throughput of your application. Let’s see, how
IIS processes a request.
When a request is received by IIS, it takes a thread from CLR thread pool (IIS does not own
any thread-pool itself instead uses CLR thread pool) and assigns to it which further processes
the request. As number of threads are limited and new ones can be created at a certain limit
then if the thread wastes most of the time in waiting then it’s going to hit hard to your
application’s overall performance. But if you write asynchronous code (which now become
very easy and can be written almost similar to synchronous using the new keywords
async/await in C#) then it will be way faster and throughput of your server will increase
significantly because instead of waiting something to complete, it will be available to thread
pool to take the new requests. If the application has a lot of dependency and long running
process then for those application, async programming will be not less than a boon.
Further you want to sort the student records by total marks per class and show on UI. If you write
this as normal java code (i.e. without multithreading), each line would execute one by one. You
cannot process another file if one file is not yet done processing. If you want to do any parallel
operation for example: Creating DB connection, you can't do, because it will happen only after
your file processing is done. This sequential behaviour can be termed as Synchronous
behaviour.
Now you can very well read and process a sub-group of files without interrupting the processing
of other files by executing tasks in parallel (aka Threads).This phenomena is called
as Multithreading . Caller (the one who needs the result) can be notified when the processing is
complete and the result can then be used for further processing. So, the execution which happens
independently, without interrupting the Normal flow of execution is called Asynchronous call.
There are a couple of ways in which you can make asynchronous calls in Java depending upon
your requirement. (But contrlling them well is extremely important and tricky at times.)
In addition to Runnable interface (which is used to just execute tasks but doesn't return anything
to caller) ,you can read about Callable interface and Future objects in java. (Which can return
data to the caller)