Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the relationship between number of CPU cores and number of threads in an app in java?

I'm new to java multi-threaded programming. The question that has came to my mind is that how many threads can I run according to the number of my CPU cores. and if I run threads more than CPU cores will it be an overhead for the machine to run the app. for example when we have a server machine which has a server software that run 2 threads(main thread + developer thread), will it be an overhead for the server when more simultaneous clients make socket connections to the server or not?

Thanks.

like image 538
Ramin Omrani Avatar asked Jan 16 '14 09:01

Ramin Omrani


People also ask

What is the relationship between cores and threads?

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. For example, if a CPU is dual core (i.e., 2 cores) it will have 4 threads.

What's the relationship between threads and processors?

Threads refer to the highest level of code executed by a processor, so with many threads, your CPU can handle several tasks at the same time. All CPUs have active threads, and every process performed on your computer has at least a single thread.

What is more important in a CPU cores or threads?

Because your PC will always schedule tasks on physical cores first before spilling over into using Threads, having a CPU with Hyperthreading or SMT will benefit you the most if you can make use of all of the CPU's Cores in workloads such as CPU Rendering.

Is more cores or more threads better?

The advantage of having several cores is that each core can handle a different data thread simultaneously, allowing for a much quicker transfer of data at any given time. A high clock speed means faster processor.


2 Answers

The number of threads a system can execute simultaneously is (of course) identical to the number of cores in the system.

The number of threads that can exist on the system is limited by the available memory (each thread requires a stack and a structure used by the OS to manage the thread), and possibly there is a limitation how many threads the OS allows (this depends on the OS architecture, some OS' may use a fixed size table and once its full no more threads can be created).

Commonly, todays computers can handle hundreds to thousands of threads.

The reason why more threads are used than cores exist in the system is: Most threads will inevitably spend much of their time waiting for some event (example: word processor waiting for user to type on keyboard). The OS manages it that threads that wait in such a manner do not consume CPU time.

like image 57
Durandal Avatar answered Sep 22 '22 08:09

Durandal


Idea behind it is don't let your CPU sleep, neither load it too much that it waste most of time in thread switching.

Its helpful to check Tuning the pool size, In IBMs paper

Idea behind is, it depends on the nature of task, if its all in-memory computation tasks you can use N+1 threads (N numbers of cores (included hyper threading)).

Or

we need to do the application profiling and find out waiting time (WT) , service time (ST) for a typical request and approximately N*(1+WT/ST) number of optimal threads we can have, considering 100% utilization of CPU.

like image 34
Rohit Sachan Avatar answered Sep 21 '22 08:09

Rohit Sachan