Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is busy spin in a multi-threaded environment?

Tags:

What is "Busy Spin" in multi-threaded environment?

How it is useful and how can it be implemented in java in a multi-threaded environment?

In what way can it be useful in improving the performance of an application?

like image 741
Bravo Avatar asked Jul 31 '14 19:07

Bravo


People also ask

What is a busy spin in multi threading?

Busy Spinning is a wait strategy in which one thread waits for some condition to happen which is to be set by some other thread. Here the waiting thread loops continuously without releasing the CPU cycles. This leads to bad performance as the CPU cycles are wasted by a waiting thread.

What is a busy thread?

Busy spinning or busy wait in a multi-threaded environment is a technique where other threads loop continuously waiting for a thread to complete its task and signal them to start.

What is a multithreaded environment?

A multithreaded program contains two or more parts that can run concurrently. Each such part of a program called thread. 2. Threads are lightweight sub-processes, they share the common memory space.

What is busy spinning in Java?

Using Busy Spinning as Wait Strategy in Java Last Updated : 08 May, 2021 Busy Spinning is a wait strategy in which one thread waits for some condition to happen which is to be set by some other thread. Here the waiting thread loops continuously without releasing the CPU cycles.

What is a busy spin?

A "busy spin" is constantly looping in one thread to see if the other thread has completed some work. It is a "Bad Idea" as it consumes resources as it is just waiting. The busiest of spins don't even have a sleep in them, but spin as fast as possible waiting for the work to get finished.

What is busyspinwaitstrategy?

LMAX Disrupter framework, a high-performance inter-thread messaging library has a BusySpinWaitStrategy which is based on this concept and uses a busy spin loop for EventProcessors waiting on the barrier. Show activity on this post. A "busy spin" is constantly looping in one thread to see if the other thread has completed some work.

Is it bad if a thread is busy waiting in Linux?

Even if the operating system knows a thread was busy waiting or spinning then also it is not known to operating system, why the thread was waiting. It’s actually bad when there are some ready-to-run threads and one of the ready-to-run threads is busy waiting in a loop for a condition to be met.


2 Answers

Some of the other answers miss the real problem with busy waiting.

Unless you're talking about an application where you are concerned with conserving electrical power, then burning CPU time is not, in and of itself, a Bad Thing. It's only bad when there is some other thread or process that is ready-to-run. It's really bad when one of the ready-to-run threads is the thread that your busy-wait loop is waiting for.

That's the real issue. A normal, user-mode program running on a normal operating system has no control over which threads run on which processors, a normal operating system has no way to tell the difference between a thread that is busy waiting and a thread that is doing work, and even if the OS knew that the thread was busy-waiting, it would have no way to know what the thread was waiting for.

So, it's entirely possible for the busy waiter to wait for many milliseconds (practically an eternity), waiting for an event, while the the only thread that could make the event happen sits on the sideline (i.e., in the run queue) waiting for its turn to use a CPU.

Busy waiting is often used in systems where there is tight control over which threads run on which processors. Busy waiting can be the most efficient way to wait for an event when you know that the thread that will cause it is actually running on a different processor. That often is the case when you're writing code for the operating system itself, or when you're writing an embedded, real-time application that runs under a real-time operating system.


Kevin Walters wrote about the case where the time to wait is very short. A CPU-bound, ordinary program running on an ordinary OS may be allowed to execute millions of instructions in each time slice. So, if the program uses a spin-lock to protect a critical section consisting of just a few instructions, then it is highly unlikely that any thread will lose its time slice while it is in the critical section. That means, if thread A finds the spin-lock locked, then it is highly likely that thread B, which holds the lock, actually is running on a different CPU. That's why it can be OK to use spin-locks in an ordinary program when you know it's going to run on a multi-processor host.

like image 111
Solomon Slow Avatar answered Sep 28 '22 16:09

Solomon Slow


Busy-waiting or spinning is a technique in which a process repeatedly checks to see if a condition is true instead of calling wait or sleep method and releasing CPU.

1.It is mainly useful in multicore processor where condition is going to be true quite quickly i.e. in millisecond or micro second

2.Advantage of not releasing CPU is that, all cached data and instruction are remained unaffected, which may be lost, had this thread is suspended on one core and brought back to another thread

like image 23
SHA Avatar answered Sep 28 '22 18:09

SHA