「Elixir」の並行性を解剖する
(underjord.io)- この記事では、著者の Elixir プログラミング言語の経験について論じており、特に並行性と並列性の機能に焦点を当てている。
- 著者は過去 5〜6 年のあいだ Elixir を主要なプログラミング言語として使用しており、その性能と欠点の少なさを認めている。
- 著者は Elixir の並行性モデルを PHP と Python と比較し、PHP の並行性モデルは Web サーバーに依存し、Python は Global Interpreter Lock(GIL)のため並行性に苦労すると主張している。
- Elixir は Erlang と Erlang 仮想マシン(BEAM)の上に構築されており、これは大量の軽量プロセスを実行するよう設計されていて、並行性と並列性の基盤を提供する。
- BEAM は起動時にスケジューラ用のスレッドを生成し、デフォルトでは利用可能な CPU コアごとに 1 つずつプロセススケジューリングを処理する。
- 著者は、Elixir と Erlang のイミュータブルな関数型プログラミングの特性は、高度な並行性と並列性を実現するために実用的に選ばれたものだと説明している。
- Elixir におけるプロセスは状態を共有せず、メッセージパッシングによってのみ非同期に通信できるため、安全な並行・並列実行が保証される。
- 著者は、Elixir でコードを書く際には Web リクエストの大半が単一プロセス内で処理されるため、こうした基本原則をそれほど気にする必要はないと指摘している。
- Elixir は並行作業のための async/await メカニズムを提供しており、これは Task モジュールで実装され、列挙可能な各項目に対して Task を実行する
Task.async_stream関数がある。 - 著者は、Elixir と Erlang における優れた並行性・並列性の選択肢は後付けではなくランタイムの基礎に組み込まれており、そのため BEAM における並行性は危険でも難しくもないと結論づけている。
まだコメントはありません。