Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a difference between concurrency and parallelism in java?

I have been doing some research in Google and cant quite get my head around the differences (if any) between concurrent and parallel programs in java. Some of the information I have looked at suggests no differences between both. Is this the case??

like image 996
user1877082 Avatar asked Jan 02 '13 22:01

user1877082


People also ask

What is the difference between concurrency and parallelism in Java?

Concurrency is the task of running and managing the multiple computations at the same time. While parallelism is the task of running multiple computations simultaneously.

Is concurrency the same as parallelism?

Concurrency is when multiple tasks can run in overlapping periods. It's an illusion of multiple tasks running in parallel because of a very fast switching by the CPU. Two tasks can't run at the same time in a single-core CPU. Parallelism is when tasks actually run in parallel in multiple CPUs.

Can you have parallelism without concurrency?

Parallel, Not ConcurrentAn application can also be parallel but not concurrent. This means that the application only works on one task at a time, and this task is broken down into subtasks which can be processed in parallel.

Is Java parallel or concurrent?

Some notes when we use concurrency and parallelism in JavaAn application can be concurrent, but not parallel. It means that it can process more than one task at the same time, but no two tasks are executing at the exact same time. A thread is only executing one task at a time.


1 Answers

It depends on who is defining it. The people who created the Go programming language call code Concurrent if it is broken up into pieces which could be treated in parallel, whereas Parallelism implies that those pieces are actually running at the same time.

Since these are programming principles, the programming language has no bearing on how they are defined. However, Java 8 will have more features to enable both concurrency and parallelism without messing up your code too much. For example, code like this:

List<Integer> coolItemIds = new List<Integer>(); for(Item item : getItems()) {     if(item.isCool())     {         int itemId = item.getId();         coolItemIds.add(item);     } } 

... which is non-concurrent and non-parallel, could be written like this (my syntax is probably wrong, but hopefully you get the idea):

Iterable<Item> items = getItems(); Iterable<Item> coolItems = items.filter(item -> item.isCool()); Iterable<Integer> coolItemIds = coolItems.map(item -> item.getId()); 

The above code is written in a concurrent manner: none of the given code requires that the coolItems be filtered one at a time, or that you can only call getId() on one item at a time, or even that the items at the beginning of the list need to be filtered or mapped before items at the end. Depending on what type of Iterable is returned from getItems(), the given operations may or may not run in parallel, but the code you've written is concurrent.

Also of interest:

  • Concurrency is not Parallelism (presentation video)
  • Concurrency is not Parallelism? (Discussion on StackOverflow
like image 135
StriplingWarrior Avatar answered Oct 14 '22 23:10

StriplingWarrior