Skip to content

Instantly share code, notes, and snippets.

@mnrn
Last active April 3, 2022 08:12
Show Gist options
  • Select an option

  • Save mnrn/474134cd039da1b5766ee0b446b27aae to your computer and use it in GitHub Desktop.

Select an option

Save mnrn/474134cd039da1b5766ee0b446b27aae to your computer and use it in GitHub Desktop.
boost.asio と libuv の比較

boost.asio と libuv の比較

実装がネットワークを高速化する際のボトルネックになっていることが多々ある。(コンピュータネットワーク- p.568)
このことからネットワークを構築する際には信頼できる OSS を使うのが良いと考えられます。

以下では、有名なネットワークライブラリである boost.asio と libuv について個人的な感想を述べて比較します。

  • asio
    • 良い点
      • c++ のライブラリである。
      • なんだかんだで速い。 ここで比較されていた
      • 一貫したデザインである。(Actorパターンとか)
        • それ故に実は結構わかりやすかったりもする。
      • メモリの管理がラク。
      • OpenSSL を使用することで SSL/TLS に対応してくれる。
      • C++ のネットワークライブラリはだいたい asio をベースにしたり、ラップしたりしている。
        • 上位に boost.beast という HTTP(HTTPS)/Websocket のライブラリもできました。
      • 次期標準ライブラリのコードだけあってレビューを受け続けAcceptされた経緯がある。
    • 悪い点
      • Boost というか Template Programming 特有の過度な抽象化による難しさがある。(人によるだろうがおそらく一般的ではない)
      • 名前空間の解決 boost::asio:: の時点でかなりコードが長い
    • 議論の余地
      • 例外を投げることもできれば投げないこともできる。
  • libuv
    • 良い点
      • c のライブラリだけあって速い。
      • 低レイヤーのシンプルなクロスプラットフォームラッパーである。
      • ポインタとメモリの管理さえしっかりすれば比較的簡単である。
    • 悪い点
      • SSL/TLS に直接は対応していない。
      • スマートポインタのコールバックを利用したりしないとメモリ管理が面倒そう。
    • 議論の余地
      • c のライブラリである。
      • もともとは Node.js のために作られたライブラリであるため、asio のような汎用ライブラリを目指しているわけではない。
      • void* をコールバック引数にとるような設計ではないのでグローバルに汚染されないためには工夫が必要。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment