mirror of
https://github.com/haproxy/haproxy.git
synced 2026-06-13 19:00:25 -04:00
Totally remove the per-thread group wait queue. This was potentially a source of contention, because there were only a global lock for all those wait queues. Instead, for shared tasks, there is now the concept of ownership for the task. When a task is in the wait queue, run queue, or is running on that particular thread, the task's tid is set to -2 - thread_tid, and only that thread will be responsible for it until it is no longer running, and in none of its queue. When a shared task is scheduled to be run at a later time, if its current tid is -1, then the current thread will take ownership, and put it in its own wait queue. If it is already owned, then TASK_WOKEN_WQ is added to the task's state, and a task_wakeup() is done, so that the owner thread will add it in its wait queue. If there is any owner, then a task_wakeup() will just add the task to the owner's runqueue, otherwise the current thread will become the owner. |
||
|---|---|---|
| .. | ||
| haproxy | ||
| import | ||
| make | ||