Iphone

コードへの賛歌:「寝ないWindowsスレッド」

コードへの賛歌:「寝ないWindowsスレッド」

Anirudh Sahni

叙事詩
GeekWire イラスト/Shutterstock
_MG_0230IMG_1321 - ゴルフなし
アニルド・サニ

ソフトウェア開発のプロセスには多くのドラマがあるにもかかわらず、それを題材にした演劇や詩はほとんどない。戦士、恋人、探検家たちの英雄的行為を詩にするのは良いことだが、ソフトウェアエンジニアの英雄的行為を詩にするのはなぜいけないのだろうか?

以前、長年マイクロソフトでソフトウェア開発者として働いていました。よく当時の仕事ぶりを聞かれます。そこで、友人や家族に当時の仕事の雰囲気を少しでも感じてもらえるよう、Windowsのバグ修正について詩を書きました。これは、実体験に基づいた架空の物語です。

寝ないWindowsスレッド

アニルド・サーニ著

かつて、終了する時間が来たことを丁寧に伝えられても、
就寝することを拒否するWindows スレッドがありました。そのスレッドは、 設定する人が誰もいなくなったセマフォのために、 SingleObjectWait() で 夜更かしするのを好んでいました。



このスレッドが長引いたため、
システムのシャットダウンが遅れ
、私たちのチームは 2 番目のベータ版をリリースできませんでした。
そのため、PM とテスター、
そして会社の投資家は、
できるだけ早く撤退したほうがよいと言いました。

他のスレッドがまだ作業を保存していない可能性がある間は、
ProcessTerminate() の運命を危険にさらすことはできませんでした。そのため、 関数 KillWinApp() に カーネル トラップを設定し、 不正動作が発生する直前にそれを観察しました。



そして、私たちは確かにそこでブロックされました
が、診断は困難であることがわかりました。
なぜなら、Go を押すとすぐに停止し、 誰が SetSemaphore() を実行しなかった
のかまだ確信が持てなかったからです 。そのため、私たちがどれだけ努力しても、それ以上何もわかりませんでした。

そこで DebugTrace() をオンにしました。
しかし、実行ペース
が十分に遅くなったため、すべてがうまく機能しなくなりました。
そのため、他のすべてにもかかわらず、
デバッグ出力から、
システム内にまだ致命的なバグが潜んでいることがわかりました。


アドバイスを求めた同じ階の年長者が、
賢そうに頷きながら、単調な口調で言った。「競合状態になったな。
ライブラリを使うのが賢明だ
。最適化を急ぐのはやめろ。
お前は自分の野心の無駄な犠牲者だ」

別の人が眉をひそめて言った。「どう思う?
DC は同期がずれることがあるんだ。
間違った軌道でコーディングしたお前には当然の報いだ!
我々のドキュメントには、
遅延が深刻になる可能性があることが明確に書いてある。
我々は『アクティブデータベース』ではなく、ディレクトリなんだ。」

研究室の卒業生たちが
、偉そうな高みから声を大にして言う。
「君たちは過去のバグにくよくよしているじゃないか!
Cシャープで書けば、
もっと心が安らぐ。
マネージドコードを使えば、そんな問題は全部消え去るんだぞ!」

提案に我慢できなくなり、
質問よりも答えを少なくし
、先入観で調査は失敗しました。
ほんの少しのひらめきと、
99%のカフェイン
、そしてスタックをあさる探求で、私たちはそれを成し遂げました。


WM_BROADCAST と呼ばれる過去の遺物が
、聞いている人全員にスレッドがブロックされるという警告を出している間
、そこに問題がありました。
時々、プラグアンドプレイ
サービスが私たちを呼び出すと、デッドロックが発生するからです。

この混乱の原因を作った老いた張本人は
、印象づけるために急いでそれを済ませ
、栄光とボーナスを持って去っていった
が、我々の自尊心は
毎日の作戦会議で打ちのめされていた。
それを片付ける責任は我々に残されていたからだ。

万全を期すため、
再設計を提案しました。
すると、リーダーたちは「スケジュールにこれほどの打撃は受けられない!
コーディングのロックダウンが始まったのに
、ゼロからやり直すのか?
もっと手っ取り早い改修方法があるはずだ!」と叫びました。

こうして、私たちは妥協案
を練り上げることになりました。別のスレッド
で呼び出しを傍受する? さらにコードを追加して肥大化を解消する? 問題を先送りする? パフォーマンスチューニングの原則を覆す?


我々は苦労して、この邪悪な計画に報いを与えるノウハウを
手に入れた。
最後の浄化の鉤で祓い去るのだ。 作戦会議の仲裁で、
さらにサイクルを盗むべきなのか? バージョン4ではさらに我々を悩ませるのだろうか?いつになったら止まるのだろうか?

Warチームは、このRAMを悪用するデバイスは
ユーザーにとってより良いものだと主張しました。
そして、彼らが挙げた理由は説得力がありました。「
出荷されない設計
。常にゼロMIPSで動作する。
販売しないのにクリーンであることに意味があるのだろうか?」

必要な機能を有効にする際には、たとえ巨大化しても致命的な
障害にはなりません。さらに、 ムーアの法則によれば、ストレージを 占有するコストはますます低下します。 したがって、理想主義は実用性に屈するしかありません。



こうして、 PC の 画面が暗く静か でマウスの動きさえない
夜には、 突然ディスクが回転し、 ShutdownBroadcastDeadlockBreakerHack() が実行されるようになりました。



アニルド・サーニはソフトウェアエンジニアであり、かつては長年Windows開発チームのメンバーでした。シアトル在住の彼は、エンジニアの創造性をエンジニアリングだけにとどめる必要はないと考えています。© 2015, アニルド・サーニ。許可を得て転載。