シグナルのゾっとする話

  • 投稿日:
  • by
  • カテゴリ:



たまたま見かけたページ。


前に、何かの仕事で



selectはEINTRも絡むし、やべぇなこりゃ



という経験をしてからというもの、select/read/writeなど待ちのあるシステムコールは避けてきました。


どこかの偉い人がきっちり書いてくれたラッパを使っていれば安心なわけでして。


で、いつものように


Geekなぺーじ:pselectでシグナルを無視する


http://www.geekpage.jp/programming/linux-network/pselect-eintr.php


を眺めて涼を感じていたのです。


さらに、もっとすごい、


シグナルとスレッド:シグナルを特定スレッドに通知する


http://linux-biyori.sakura.ne.jp/program/pr_rtsig_th.php


というのも眺めて、窓から吹き込む寒風の中、涼を楽しんでみました。



(補足)


スレッドを複数作成した場合は通知したいスレッド以外の全てのスレッドでシグナルをマスクする必要があります。



この補足を読んでいて、スレッドが100も200も走っていたら、それこそ



シグナル受信したら貧乏くじに当たったようなもん?



ということではないかと思い至りました。

スタックは別スタックを使ってくれるようですが*1、糞重いスレッド(=CPUの占有率が高い)がいれば、当たりくじを引く確率が高くなるでしょう。


そして、タブーの「シグナルハンドラ内での重い処理」を書いてしまっていたとすると、ますます優先度の低いスレッドにはCPUが回らなくなるでしょう。


そうして、「CPUパワーは足りているはずなのに、何でこんなに動作がのろいんだ?」というシステムが出来上がるわけです。