0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

multiprocessing / threading / asyncio をどう判断したか〜「速くする」より「狙った負荷を出す」設計

0
Posted at

はじめに(この記事の役割)

この記事は、

  • Python の並行処理入門
  • asyncio の使い方解説

ではありません。

edrsim を設計・実装する中で、

「なぜこの並行処理モデルを選んだのか」
「なぜ他を選ばなかったのか」

という 設計判断そのものを残すための記事です。

この連載の全体像・目次はこちら

先に結論を書きます

edrsim では、

  • multiprocessing
  • threading

を使い、

  • asyncio は使っていません

理由は単純です。

edrsim の目的は
処理を効率化することではなく、
“狙った重さの負荷”を安定して出すことだからです。

並行処理の選択肢を整理する

まずは、選択肢を並べます。

それぞれの特徴を 教科書的に ではなく
今回の目的目線で見ます。

edrsim の処理は何が重いのか?

ここを誤ると、設計が全部ズレます。

edrsim の中身は?

  • ファイルイベントを受け取る
  • 疑似検査処理を行う
  • ログ・状態を記録する

重要なのはここです。

疑似検査処理は
意図的に CPU を使うように作っています

つまり edrsim は、

CPU-bound な処理を“わざと” 持っているツール

です。

CPU-bound と I/O-bound の違い(超重要)

ここが分かれていないと、asyncio を選びがちになります。

CPU-boundとI/O-boundのことはこちらの投稿も参照してみてください。

  • I/O-bound

    • ネットワーク待ち
    • ファイル待ち
  • CPU-bound

    • 計算
    • ハッシュ
    • スキャンっぽい処理

edrsim は 後者 です。

なぜ asyncio を使わなかったのか

ここはよく聞かれます。

「asyncio の方が今風では?」

asyncio を使うとどうなるか

  • asyncio は 1スレッド

  • CPU-bound 処理をすると

    • イベントループが止まる
    • 他タスクが進まない
  • 「負荷を分散」ではなく
    「負荷を隠す」方向に寄ってしまう

並行処理の判断を図にするとこうなる

edrsim では、「どの技術が流行っているか」ではなく
主な処理が何かを起点に判断しています。

edrsim で重要だったのは「見える負荷」

edrsim の目的を思い出します。

EDR導入後のサーバ負荷を評価する

ここで欲しいのは、

  • CPU 使用率が どう上がるか
  • コア数によって どう変わるか
  • 他プロセスに どう影響するか

asyncio は、

  • OSレベルの負荷分散を見にくくする

という点で 目的に合いません

multiprocessing を選んだ理由

  • GIL の影響を受けない
  • CPU コアをちゃんと使う
  • 本番環境の負荷に近い

「重くなるなら、ちゃんと重くなれ」

これが設計思想です。

threading を併用した理由

すべてを multiprocessing にしなかった理由もあります。

  • 設定読み込み
  • ログ出力
  • 軽い制御処理

これらは、

  • CPU を食わない

  • 同期しやすい

  • threading で十分

edrsim の並行処理構成(全体像)

  • 役割で分ける
  • 技術で分けない

「速さ」より「制御できる重さ」

ここが一番大事なポイントです。

  • 高速に処理したい → asyncio
  • 最大効率を出したい → 並列最適化

edrsim は違います。

「どのくらい重くするか」を
再現・調整できることが最優先

この判断が後で効いてきた

この並行処理設計のおかげで、

  • CPUコア数違いの比較ができる

  • 仮想環境 / 物理環境差が見える

  • 「思ったより重い」が事前に分かる

  • 設計判断は、後工程で回収される

まとめ

  • asyncio を使わなかったのは「遅れている」からではない
  • 目的に合わなかった
  • edrsim は CPU-bound を前提に設計されている
  • 並行処理は「技術選定」ではなく「負荷設計」

次回予告

edrsim は Python 初級・中級・上級のどこか?

次は、

  • PCEP / PCAP / PCPP
  • コード量ではなく「設計レベル」

という視点で、edrsim を分解します。

  • 「Python が書ける」と「作れる」の境界線の話です。

ツール公開先

Github にコードを公開しています。

最後に

asyncio を使わなかった理由は、
技術的な優劣ではありません。

「このツールは、何のために存在するのか」

それに正直に向き合った結果です。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?