あめだまふぁくとりー

Boost.Graphとかできますん

Asio

Networking TS の Boost.Asio からの変更点 - その 4: Associated Executor

はじめに Boost 1.66 で Boost.Asio が Networking TS に対応するようです. なのでその 3 からかなり間が空きましたが, その 4 の記事を書きます. 前回 Executor について説明したので, 今回は Associated Executor について説明します. Boost.Asio でのハン…

Networking TS の Boost.Asio からの変更点 - その 3: Executor

はじめに 前回までに説明した Associated allocator や async_result は少し地味目な変更点でした. 今回説明する Executor は Boost.Asio から Networking TS の中でも大きめの変更になっています. 一般化された io_service と strand Executor は Networkin…

Boost.Asio でのタイマのキャンセル処理の仕方

先日, マイナンバーのカード管理システムの障害の原因と対応についての発表がありました. 地方公共団体情報システム機構 カード管理システムの中継サーバに生じた障害原因の特定と対応について その原因 2 では, Windows のタイマをキャンセルしたのにタイム…

Networking TS の Boost.Asio からの変更点 - その 1: Associated allocator

はじめに 現在 TS に提案されている Networking Library は Boost.Asio をベースにしていますが, Boost.Asio そのままというわけではなく様々な変更が含まれています. 本記事ではそれらの変更点によって何が変わったのかを説明しようと思います. 最初は Asso…

io_service の使い方

この記事は C++ Advent Calendar 2015 14 日目の記事です. 13 日目は okdshin さんの Boost.Computeでグラボを燃やす - クリアボックス でした. 本記事の内容 本記事では io_service をどう使うかについて書きます. 具体的には, io_service の使用モデルを整…

initiating function 内で yield_context を呼べるようになった

Boost 1.58.0 以降では, Asynchronous operation の initiating function (async_write_some など) 内で直接 yield_context の handler の呼び出しが可能になりました. 以前まではどうだったかというと, spawn 外へのコンテキストスイッチ (initiating funct…

Asio の coroutine で明示的に yield する

実行時間がかかる処理 A を coroutine の中で行うと, その coroutine と同じ strand 内の処理は処理 A が完了するまで待たされてしまいます. io_service::post または strand::post を使用することで, 処理 A の合間で明示的に coroutine を切り替えることが…

boost::asio::async_write / read の限界

asio::async_write と asio::async_read に難癖をつけてみます. stream のコンテキストとハンドラのコンテキストが分離されていない socket への書き込み (読み込み) 処理は sock_strand 内で実行し, その書き込み (読み込み) 完了のハンドラは handler_stra…

連続で async_write するまでの道のり (その 3)

単一の socket で連続して async_write するの 3 回目で, 最終回です. 前回の記事では strand を使用方法について見ました. 本記事では作成する queueing socket の wrapping callback に strand を適用する方法を見ていきます. wrapping callback の実装 qu…

boost::asio::asio_handler_is_continuation の効果

asio_handler_is_continuation の効果がいまいち良く分からなかったので調べてみました. ある handler について, asio_handler_is_continuation の結果が true の場合, 処理が以下の様に少し変わります. handler はスレッド固有の private queue に一度登録…

連続で async_write するまでの道のり (その 2)

単一の socket で連続して async_write するの 2 回目です. 前回の記事 では, 普通に socket に対して非同期送信関数を連続で呼び出す際の問題点について整理しました. 前回の内容を踏まえると, 以下のような動作をする async_write_some メソッドを持つ soc…

連続で async_write するまでの道のり (その 1)

単一の socket を使用して, 一つ目の送信処理の完了を待たずに二つ目の送信処理を実行したいといった場合は多々あります. レスポンスの順番がリクエストの順番とは異なる非同期プロトコルを使用または実装する場合には, そういったケースに特に遭遇します. B…