Linuxとpthreadsによるマルチスレッドプログラミング入門を読んでいる。
この記事は第一章のメモ。
pthreadに関する基本的な知識はあるので序盤はあんまりメモしなくて良いかなという感じで読み始めた。
マルチプロセスとマルチスレッドの違い
- コンテキストスイッチの重さ
- マルチプロセスの場合、コンテキストスイッチする前にその実行環境(メモリ内容などのリソース状態)を保全して、後で戻ってきた時のメモリ内容などを戻さないといけないため、比較的重たい。
- マルチスレッドの場合、コンテキストスイッチする際に保全しないといけない情報はプログラムカウンタやスタックポインタなどの極小数の情報だけで済む。高速。
マルチスレッドプログラミングの基本要素
- pthreadで重要なのは高々15種類
- その他はOSやライブラリのバージョンによって挙動が違ったり、利用に特別な注意が必要。
- pthreadには動作を一時停止する関数はない。スレッドでの動作を一定時間停止するには標準ライブラリ内のsleep関数やnanosleep関数を用いる。
- 他のマルチスレッドシステムでは、他のスレッドの処理の割り込みを許す、という動作を指示する関数が用意されている(yield)。しかしpthreadは原則として「常に他のスレッドの割り込みは許されている」というポリシーで作られているため、yieldに相当する関数は存在しない。