You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
There are many uses of TQueue in this codebase, which is an unbounded queue. This effectively negates flow-control, as the consumer has no way to tell the producer to slow down, and the queue grows without bound by design.
You might not notice any problems during most normal system loads, but it can cause hard-to-debug problems during heavy load - the scheduler generally cannot figure out which consumers need to be run more often than which producers to keep the queue sizes down and so the queues may run out of memory.
The solution is not simple; generally one ought to replace the queue with a bounded queue, but depending on the relationship between the producers and consumers setting the appropriate bound is not obvious and case-dependent. If it is set too low, deadlocks can occur, e.g. if two threads have two queues between them in opposite directions, this is a cyclic relationship and can deadlock depending precisely on how the production / consumption depend on each other.
The text was updated successfully, but these errors were encountered:
There are many uses of TQueue in this codebase, which is an unbounded queue. This effectively negates flow-control, as the consumer has no way to tell the producer to slow down, and the queue grows without bound by design.
You might not notice any problems during most normal system loads, but it can cause hard-to-debug problems during heavy load - the scheduler generally cannot figure out which consumers need to be run more often than which producers to keep the queue sizes down and so the queues may run out of memory.
The solution is not simple; generally one ought to replace the queue with a bounded queue, but depending on the relationship between the producers and consumers setting the appropriate bound is not obvious and case-dependent. If it is set too low, deadlocks can occur, e.g. if two threads have two queues between them in opposite directions, this is a cyclic relationship and can deadlock depending precisely on how the production / consumption depend on each other.
The text was updated successfully, but these errors were encountered: