並行処理、並列処理とは? part1

今回、42tokyoの課題のphilosopherという課題に取り組むに当たって、勉強していることをその都度まとめて投稿していこうと思います。

一通り読んで投稿しているわけではなく読み進めていくなかでその時点での理解をアウトプットしていく形なので、信用しないようにお願いします。

何か訂正、ご指摘等ございましたらコメントしていただけると幸いです。

参照する本は、”POSIXスレッドプログラミング"です

非同期とは?→任意の2つの操作が互いに独立に進むことができる場合、それらの2つの操作は「非同期(asynchronous)」であるという。

これを理解するには、”船から水を汲み出すプログラマ”という話が有名みたいです。

簡単に説明すると、

小舟に3人のプログラマ、彼らが嵐で沖まで流されて船は水が入っている。

オールが1セット、バケツが1つ。

一人がオールで漕いで、船の浸水を監視。やることがない2人は眠る。

浸水がやばくなったら、オールで軽く突き一人起こしてバケツで海水の汲み出し。叫んで二人起こしてどっちかにバケツの海水の汲み出しをさせもう一人は眠りに戻る。

漕ぎ手が疲れた時彼は仕事を変わってくれるように他のプログラマの1人に合図をし、今度は合図されるのを待ちながらすぐに深い眠りに入る。

このようにして、彼ら3人は陸に着くまで船旅をする。


ざっくりと、この物語を今回使う用語に当てはめてみると、

プログラマはスレッド(独立に活動できる実態)

オール、バケツ(一度に1人しか保持できない)はトークン(共有データ、同期オブジェクトとみなせる)→同期オブジェクトとはmutexのこと

軽い突き、叫び声はプログラマが条件を待つための同期オブジェクトと結び付けられる通信メカニズムである。

Pスレッドは共有データ状態の変化を示すために合図するかブロードキャストすることのできる条件変数を提供してくれる。

今回はここまで、次をお待ちください。


この記事が気に入ったらサポートをしてみませんか?