プログラムが処理する仕事には色々な種類があります。
種類に応じて仕事を仕分けし、担当者を割り振るようにすると、効率よく仕事を処理することができます。
■締切を守る人
絶対に遅れたくない仕事を専門に処理する人です。
この人には余計な仕事を任せず、常に手が空くようにする必要があります。
■大きな仕事専門
時間がかかりそうな仕事を専門に処理する人です。
大きな仕事をしている最中は別の仕事ができないため、すぐにやってほしい仕事を任せるのは避けた方がよいです。
■数をこなす人
一つ一つは小さいけど、数が多い仕事をこなす人です。
仕事がバラバラだと切り替えに余計な手間がかかるため、できるだけ同じ仕事をまとめて任せると効率よく処理してくれます。
もっと深く学びたい方へ
ここでいう「担当者」とは、実際のプログラムにおいては「プロセス」「スレッド」「コア」などを指します。
「締め切りを守る人」は、メインスレッドとも呼ばれます。
プログラミング現場では「main」「exec」などの名前がついていることが多いです。
この人の仕事があふれてしまうと、いわゆる「処理落ち」が発生します。
(ゲームでは「FPSが出ない/安定しない」とも言われます)
ユーザーにとっては非常にストレスになるため、何としても避けなければなりません。
具体的には、メインスレッドにある時間のかかる処理を別のスレッドに任せたり、1回の更新間隔を長くして「多少遅いけど、安定しているので気にならない」状態を作ったりします。
「大きな仕事専門の人」がやるのは、AIの計算、ファイルの読み書き、ネットワーク通信など、処理量が多かったり待ち時間が必要だったりする仕事です。
専門の人に大きな処理をやらせている間にメインスレッドは別のこと(ゲームであればローディング中のアニメーション表示など)をして、処理が終わり次第メインスレッド側もそれに応じた処理(ロード画面を消してゲームを始めるなど)を行うようにします。
「数をこなす人」がやるのは、キャラクターを一人動かす、木を一つ表示する、などの処理です。
これらの処理の多くはループで処理され、ループの前後に準備・片付け処理が置かれています。
同じ処理をまとめて行うことで、準備・片付けにかかる時間を少なくできます。
詳しくは以下の記事を参考にしてください。
ゲーム開発の現場では、
処理落ちしているから、この処理を別コアに回したいな。
どこが空いてる?
CPU 2 なら空いてます。
というようなやり取りが行われます。
このような会話に出会ったら、今回の話を思い出してください。
コメント