Talking Async Ep2: Cancellation in depth

Поделиться
HTML-код
  • Опубликовано: 29 янв 2025

Комментарии • 12

  • @Slicc12345
    @Slicc12345 Год назад +2

    best video as a introduction to asio coroutines! had problems finding anything else

  • @rodionmontsarj5296
    @rodionmontsarj5296 2 года назад +2

    Thank you Chris and Klemens for great talk! At 17:30 step_2.cpp is_stopped() method is left not modified from previous example. I believe it should be:
    bool is_stopped() const
    {
    return stopped_;
    }

  • @and_then_I_whispered
    @and_then_I_whispered 4 месяца назад

    We're getting an introduction from the developer of Asio itself. Nice!

  • @wolpumba4099
    @wolpumba4099 6 месяцев назад

    *Summary*
    *General Topic:* Exploring cancellation support in Asio, including the new per-operation cancellation.
    *1. [**0:52**] Basic Cancellation with a Watchdog Timer:*
    - [2:51] Add a timer and deadline to the proxy class.
    - [3:22] Implement a watchdog loop:
    - [3:32] Set timer expiry to deadline.
    - [3:38] Asynchronously wait for the timer.
    - [3:48] If deadline passed, stop the proxy by closing sockets; otherwise, continue looping.
    - [4:55] Start watchdog when read/write operations begin.
    - [4:47] Stop watchdog and initialize timer on shutdown.
    - [5:31] This approach is a "blunt tool" as it cancels everything after timeout.
    *2. [**10:30**] Using "cancel" and Handling Race Conditions:*
    - [10:41] Replaced "close" with "cancel" for finer control.
    - [11:12] Introduced a "stopped" flag to handle potential race conditions between operation completion and cancellation.
    - [12:29] Highlighted the race condition inherent in `async_write`, which composes multiple write operations.
    - [14:48] Demonstrated the use of a completion condition to check for cancellation between `async_write_some` calls.
    *3. [**19:10**] Per-Operation Cancellation with Signals and Slots:*
    - [19:29] Introduced the new per-operation cancellation feature.
    - [19:31] Added a heartbeat timer and associated cancellation signal.
    - [19:17] Modified server-to-client read operation:
    - [21:08] If canceled, send a heartbeat message instead.
    - [23:07] Connected the operation's cancellation slot to the heartbeat signal.
    - [23:14] Showcased how `bind_cancellation_slot` associates an operation's cancellation with a signal.
    *4. [**25:07**] Cancellation Slots: Low-Level Building Blocks:*
    - [25:14] Explained the signal/slot mechanism for per-operation cancellation:
    - [25:21] A signal is emitted to request cancellation.
    - [25:27] Operations are connected to signals through slots.
    - [25:27] Slots invoke registered handlers upon receiving a signal.
    - [27:20] Emphasized that cancellation slots are low-level mechanisms and shouldn't be managed directly in high-level code.
    *5. [**27:45**] Parallel Groups for Simplified Cancellation:*
    - [27:57] Replaced the separate heartbeat loop with `asio::parallel_group`.
    - [28:23] Demonstrated the use of a parallel group for concurrently running the read operation and the heartbeat timer.
    - [33:42] Highlighted `asio::make_parallel_group` for simplified cancellation management within the group.
    - [32:56] Illustrated how different wait options (e.g., `wait_for_all`, `wait_for_one`) influence cancellation behavior within the group.
    *6. [**36:19**] Customizing Cancellation in Asynchronous Operations:*
    - [37:05] Implemented a custom `async_wait_for_signal` operation.
    - [37:23] Demonstrated the use of `asio::async_initiate` for implementing custom operations.
    - [44:08] Illustrated how to integrate cancellation slots into custom operations:
    - [44:15] Retrieve the cancellation slot using `asio::get_associated_cancellation_slot`.
    - [44:49] Assign a cancellation handler to the slot if connected.
    *7. [**47:11**] Cancellation Types and Guarantees:*
    - [47:50] Explained different cancellation types:
    - [48:05] *Terminal:* Side effects may have occurred, rendering the object unusable.
    - [49:05] *Partial:* Some progress is made, the object's state is known, and the operation can potentially be resumed.
    - [50:00] *Total:* No observable side effects, allowing for operation repetition.
    - [55:38] Showcased adjusting cancellation behavior based on the requested cancellation type using `asio::cancellation_type`.
    - [55:38] Demonstrated building an operation (buffered message reading) supporting total cancellation on top of lower layers that only provide partial cancellation.
    *Key Takeaways:*
    * Asio offers various mechanisms for handling cancellation.
    * The `asio::cancellation_slot` is a powerful low-level building block for cancellation.
    * High-level constructs like co-routines and `asio::make_parallel_group` simplify cancellation management.
    * Cancellation guarantees (terminal, partial, total) provide information about the object's state after cancellation.
    i used gemini 1.5 pro to summarize the transcript

  • @SamWhitlock
    @SamWhitlock 3 года назад +1

    This video feels like some portal into the future. I really have to watch it carefully to learn the new ASIO ways and co_await!

  • @thenoblegnuwildebeest3625
    @thenoblegnuwildebeest3625 3 года назад +11

    When will we be able to expect a new episode? Very much enjoyed the first two.

  • @Hipony-vb9nl
    @Hipony-vb9nl 3 года назад +4

    Fantastic talk, Klemens especially asks great questions!

  • @maksimsivyy5684
    @maksimsivyy5684 3 года назад +8

    Thanks for amazing content!
    Are you going to cover some advanced multithread-wise stuff in next episodes?

  • @mjKlaim
    @mjKlaim 3 года назад +3

    Audio is better, thanks! Now I need to watch very focused, it's not an easy topic........