猫型エンジニアのブログ

プログラム/ネットワーク系の技術関連をまとめたページです 

言語のしくみ その4

2-2 新言語「Streem」

  • シェルは自然な形でマルチコアを活用している

Streemの特徴

  • 軽量なコンカレント実行
  • 競合条件の排除(すべてのデータ構造はイミュータブル)
  • 計算モデル

2-3 文法チェッカーをまず作る

2-4 イベントループ

ブロッキングっていうと、そういえばノンブロッキングIOとかの用語を聞くことがありますね。

サーバ等のプログラムにおいては、処理効率を上げるためにI/O多重化が必要になります。そのI/O多重化の方法として「ノンブロッキングI/O」「マルチスレッド」「マルチプロセス」等の様々な手法が存在します。

下のような神サイトは本当に助かります。
blog.takanabe.tokyo
blog.shibayu36.org
Linuxネットワークプログラミング(シングルプロセス、シングルスレッドで多重化) – ITインフラ技術の実験室

select

 selectは「積極的に利用する必要は特にない」そうです。

selectはI/Oを多重化するためのシステムコールの1つ。監視対象のファイルディスクリプタn個をループの中で1つずつ状態確認する。そのため,計算量的にはO(n)になる.また,扱えるファイルディスクリプタの数に上限があるため、現在はこのシステムコールを積極的に利用する理由は特にない。

epoll

 ソケット監視のようなイベントドリブン型のプログラムならepollを利用するのが一番のようですね。

epollはファイルディスクリプタの数に制限が無いのに加えて、ファイルディスクリプタの状態変化監視も改善されている。具体的には,ファイルディスクリプタの状態をカーネルで監視しており、変化したものを直接通知できるためselect、pollの時のようにループを使った監視をする必要がない。これにより、計算量はO(1)となり、よりパフォーマンスの高い多重化I/Oを実現できる。

2-5 マルチスレッドとオブジェクト

 正直書かれている内容をうまく理解できなかったです。なんとなくキューとマルチスレッドと排他制御で処理を効率化しているくらいしか...。まだまだ勉強が足りません。(>_<)