NF

地方で働くプログラマ

「並行プログラミング入門」読みすすめ その5(5章のさわり)

「並行プログラミング入門」読みすすめ その1 - NF
「並行プログラミング入門」読みすすめ その2 - NF
「並行プログラミング入門」読みすすめ その3(入力とか) - NF
「並行プログラミング入門」読みすすめ その4(借用とか) - NF
5章の序盤だけ。

5.1 並行サーバ

初回の日記で並行サーバよく分からんみたいに書いてたけど、サンプル読んでて理解した。
 
1つ目の例のaccept()はコネクション要求しか受けれないけど、2つ目の例のepoll()はコネクション要求とデータ受信完了の2つを受けられるので、より細かい粒度で処理できるよ、ってだけっぽい。んで、細かい粒度で処理できない方を「反復サーバ」、できる方を「並行サーバ」と呼ぶという感じで理解した。
 
合ってるか余り自信ない。最初、なんで実装例はシングルスレッドなのに「並行サーバ」なんだって思ったし、受けるイベントが1つから2つになっただけで名前が違うのがしっくり来なかった。一応、今はメリットとかも理解したと思う。

5.2.1 コルーチン

何か、色々調べてると明確な定義が無い用語らしい。
ダイジェスト版「コルーチン」とは何だったのか - HackMD
日刊Coroutines(0) コルーチンのおさらいと近年の動向(若干) - lilyum ensemble
 
取り合えず、途中で止めたり再開できるスレッド、と理解した。
Rustはコルーチンの仕様が無いらしく、本のサンプルでは状態マシンを地力で実装してる。
あと「対称コルーチン」と「非対称コルーチン」があって、止まる時に別のスレッドを開始(再開)するのが前者、呼び出し側がいて止めたり再開したりを出来るのが後者?


ちょっと、もう少し調べる。