27 Commits

Author SHA1 Message Date
Alexander A. Klimov
df63a78ad9 WIP 2024-12-05 13:21:48 +01:00
Alexander A. Klimov
7097bdb97d Revert "[Refactor] CpuBoundWork#CpuBoundWork(): require an io_context::strand"
This reverts commit 5ca0d7102af59ca309fa9c071d5280de4e096b5c.
2024-12-05 13:21:48 +01:00
Alexander A. Klimov
bb380d33e0 Introduce AsioConditionVariable 2024-12-05 13:21:48 +01:00
Alexander A. Klimov
11f0a1d34a Rename AsioConditionVariable to AsioEvent
The current implementation is rather similar to Python's threading.Event, than to a CV.
2024-12-05 13:21:48 +01:00
Alexander A. Klimov
21a0dcbfcb Revert "CpuBoundWork#CpuBoundWork(): don't spin on atomic int to acquire slot"
This reverts commit 7c4b70f8998b2081bee3610cb03b9b8b5cf04e7d.
2024-12-05 10:38:27 +01:00
Alexander A. Klimov
7c4b70f899 CpuBoundWork#CpuBoundWork(): don't spin on atomic int to acquire slot
This is inefficient and involves unfair scheduling. The latter implies
possible bad surprises regarding waiting durations on busy nodes. Instead,
use AsioConditionVariable#Wait() if there are no free slots. It's notified
by others' CpuBoundWork#~CpuBoundWork() once finished.
2024-12-05 10:18:48 +01:00
Alexander A. Klimov
5ca0d7102a [Refactor] CpuBoundWork#CpuBoundWork(): require an io_context::strand 2024-12-05 10:18:46 +01:00
Alexander A. Klimov
52d53ec1ba CpuBoundWork#~CpuBoundWork(): just call #Done() to deduplicate code 2024-12-05 10:17:16 +01:00
Alexander A. Klimov
2cb282eb9d Remove unused IoBoundWorkSlot 2024-12-05 10:17:16 +01:00
Eric Lippmann
c7293de91d IoEngine: Always log coroutine exception diagnostics
While analyzing a possible memory leak, we encountered several coroutine
exception messages, which unfortunately do not provide any information
about what exactly went wrong, as exception diagnostics were previously
only logged at the notice level.
2024-02-08 12:09:06 +01:00
Alexander A. Klimov
9585a63fa0 Introduce IoEngine::YieldCurrentCoroutine() 2022-03-02 16:39:44 +01:00
Alexander A. Klimov
647f1547a9 Generalize I/O timeout emulation 2020-06-17 10:31:40 +02:00
Alexander A. Klimov
b65aed1dd3 IoEngine#SpawnCoroutine(): always terminate coroutines cleanly 2020-02-19 10:51:26 +01:00
Alexander A. Klimov
0ed0f73d9d IoEngine#SpawnCoroutine(): remove redundand overload 2020-02-05 15:31:57 +01:00
Alexander A. Klimov
d98493c90f IoEngine#SpawnCoroutine(): don't copy parameter 2020-02-05 15:30:03 +01:00
Michael Friedrich
f62f2eb25e Boost Coroutines: Increase the default stack size from 64 to 256KB
refs #7532
2019-12-13 17:20:06 +01:00
Michael Friedrich
2c0e0da2d9 Introduce IoEngine::SpawnCoroutine wrapping asio::spawn and Boost exceptions
This is required to

- catch all exceptions and wrap them into Boost exceptions. They
are the only ones allowed with Boost.Coroutine.
- set a dedicated coroutine stack size for Windows.

refs #7431
2019-09-09 16:40:35 +02:00
Michael Friedrich
5fa7331cc9 Quality: Replace deprecated Boost IO service code
https://github.com/boostorg/asio/issues/110
https://www.boost.org/doc/libs/1_66_0/doc/html/boost_asio/example/cpp03/services/logger_service.hpp
2019-09-09 15:27:57 +02:00
Michael Insel
a6a0631e99 Unify copyright headers
Update (left over) copyright headers to generic copyright headers.
2019-05-24 16:25:32 +02:00
Alexander A. Klimov
79220ee647 io-engine.hpp: fix missing namespace 2019-04-01 13:31:16 +02:00
Alexander A. Klimov
8b3efe5759 Introduce AsioConditionVariable 2019-04-01 13:31:16 +02:00
Alexander A. Klimov
b384f859c9 Make IoEngine::m_CpuBoundSemaphore signed 2019-04-01 13:31:16 +02:00
Alexander A. Klimov
282f8fd173 IoEngine: explicitly join I/O threads 2019-04-01 11:40:14 +02:00
Alexander A. Klimov
ac72ca4ae6 Don't warn that Boost.Coroutine v1 is deprecated 2019-04-01 11:40:14 +02:00
Alexander A. Klimov
d7b465ce74 Implement IoBoundWorkSlot 2019-04-01 11:40:14 +02:00
Alexander A. Klimov
2d7714802d Allow CpuBoundWork to be done before end of scope 2019-04-01 11:40:14 +02:00
Alexander A. Klimov
c547e9a863 Implement basic I/O engine 2019-04-01 11:40:14 +02:00