Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

When Should I Use Threads?

As far as I'm concerned, the ideal amount of threads is 3: one for the UI, one for CPU resources, and one for IO resources.

But I'm probably wrong.

I'm just getting introduced to them, but I've always used one for the UI and one for everything else.

When should I use threads and how? How do I know if I should be using them?

like image 958
cam Avatar asked May 18 '10 12:05

cam


People also ask

When should I use threads in python?

Python threads are used in cases where the execution of a task involves some waiting. One example would be interaction with a service hosted on another computer, such as a webserver. Threading allows python to execute other code while waiting; this is easily simulated with the sleep function.

Is it better to use threads or processes?

Inter-thread communication is far more efficient and easier to use than inter-process communication. Because all threads within a process share the same address space, they need not use shared memory. Protect shared data from concurrent access by using mutexes or other synchronization tools.

What is the importance of using threads?

On a multiprocessor system, multiple threads can concurrently run on multiple CPUs. Therefore, multi-threaded programs can run much faster than on a uniprocessor system. They will also be faster than a program using multiple processes, because threads require fewer resources and generate less overhead.


2 Answers

Unfortunately, there are no hard and fast rules to using Threads. If you have too many threads the processor will spend all its time generating and switching between them. Use too few threads you will not get the throughput you want in your application. Additionally using threads is not easy. A language like C# makes it easier on you because you have tools like ThreadPool.QueueUserWorkItem. This allows the system to manage thread creation and destruction. This helps mitigate the overhead of creating a new thread to pass the work onto. You have to remember that the creation of a thread is not an operation that you get for "free." There are costs associated with starting a thread so that should always be taken into consideration.

Depending upon the language you are using to write your application you will dictate how much you need to worry about using threads.

The times I find most often that I need to consider creating threads explicitly are:

  • Asynchronous operations
  • Operations that can be parallelized
  • Continual running background operations
like image 197
Craig Suchanec Avatar answered Jan 25 '23 12:01

Craig Suchanec


The answer totally depends on what you're planning on doing. However, one for CPU resources is a bad move - your CPU may have up to six cores, plus hyperthreading, in a retail CPU, and most CPUs will have two or more. In this case, you should have as many threads as CPU cores, plus a few more for scheduling mishaps. The whole CPU is not a single-threaded beast, it may have many cores and need many threads for 100% utilization.

You should use threads if and only if your target demographic will virtually all have multi-core (as is the case in current desktop/laptop markets), and you have determined that one core is not enough performance.

like image 26
Puppy Avatar answered Jan 25 '23 13:01

Puppy