Rustのランタイム
- Javaのような言語で使われる典型的な意味のランタイムは、持ちません
- Rustの標準ライブラリの一部は、ヒープ、バックトレース、巻き戻し、スタックガードなどを提供するランタイムであると考えられます
- ユーザのmain関数を呼ぶ前に少しの初期化コードが実行されます
- Rustの標準ライブラリはさらにCの標準ライブラリとリンクしますが、これはランタイムの初期化のようなことを行います
- Rustコードは標準ライブラリなしでコンパイルできるので、この場合はランタイムはおおよそCのランタイムと等価です
- async/awaitなどを使い非同期関数や非同期ブロックで非同期タスクを作る事はできます
- しかし、生成した非同期タスクを実行するすべは用意されていません
- そのため、非同期タスクを正しく起動して実行を監視し、きちんと非同期タスクを完了させるために非同期ランタイムを用いる必要があります
Rustランタイム種類
- ランタイムとは非同期プログラミングの処理機能
- Rustのランタイムには大きく分けて2種類ある?
io_uring版ランタイム
-
io_uring
はLinuxで非同期IO
をするためのAPI
【glommio】
-
glommio
は、io_uring
インターフェイスしかサポートせず、比較的新しいLinuxカーネルでしか動きません。 - この大衆に迎合しない差別化で、先鋭的なユーザを引き付けることが期待されます。
- 高性能なサーバを実装するための
C++
のフレームワークであるSeastar
に影響を受けており、CPU間でデータを共有せず、ロック競合を避けることで、CPU数に対する性能のスケーラビリティを実現するアーキテクチャが採用されています。
epoll版ランタイム
-
epoll
とはLinux固有のAPIで、パイプやソケットなど出入力に待ちが発生する対象を複数同時に待つ、いわゆるIOの多重化の機能を提供している
- パイプやソケットなど出入力に待ちが発生する対象を複数同時に待つ、いわゆるIOの多重化の機能を提供します。
【Tokio】
-
Tokio
は、デファクトであろうランタイムで、AWS
、Microsoft
などクラウドネイティブな会社がそのユーザとして知られています - 非同期ランタイムの一つ。
- Tokioは、Rustで非同期アプリケーションを実装するために不可欠なさまざまな機能を提供する多数のモジュールで構成されている
【smol】
-
smol
とは、Tokio
に対して、「A small and fast async runtime
」というビジョンで始められたプロジェクトです。 -
OSS
プロジェクト、プロレス団体、宗教団体、どのような組織も巨大化すると、「立ち上げ時の理想が失われた」などの理由で、新たに小さな団体を立ち上げる人たちが出現しますが、そういうやつです。
【async-std】
-
glommio
、Tokio
、smol
が、ネットワークやストレージなど、主にサーバ・クライアントの実装に必要なAPIのみを非同期化しているのに対し、async-stdは、文字列操作など、全ての標準APIを非同期化することを目指すというハードコアなやつです。
※ 結論、まだ理解していない・・・w