複数のスレッドを実行する方法であって、休止中のスレッドにバケット優先度値を割り当てることによって、前記休止中のスレッドの実行の準備ができた場合に、前記休止中のスレッドと関連付けられたスレッド規定優先度値を、前記休止中のスレッドと関連付けられたスレッド量子化優先度値にマッピングするステップと、前記休止中のスレッドを、実行の準備ができているキューに追加するステップと、前記休止中のスレッドと関連付けられた、前記スレッド量子化優先度値、スレッド量子値、またはこれらの組合せを更新するステップであって、マップを用いて静的に更新するステップと、バケット優先度値に基づいて動的に更新するステップとのうちの1つを含む、ステップとを含む、方法。前記スレッド量子化優先度値が、前記スレッドの実際のランタイムに基づく前記スレッドの優先度値を含む、請求項1に記載の方法。量子化優先度値を選択された優先度値にマッピングするステップをさらに含む、請求項1に記載の方法。前記スレッド量子化優先度値、前記スレッド量子値、またはこれらの組合せが、静的に、動的に、またはこれらの組合せにより更新される、請求項1に記載の方法。実行キュー上で実行すべきスレッドを選択するステップをさらに含む、請求項1に記載の方法。前記選択されたスレッドが、最高の量子化優先度値を有するスレッドのグループから選択される、請求項4に記載の方法。量子値を規定優先度値にマッピングするステップをさらに含む、請求項4に記載の方法。前記選択されたスレッドを実行するステップをさらに含む、請求項6に記載の方法。前記選択されたスレッドと関連付けられたスレッド量子値が完了した場合に、前記選択されたスレッドに対する、スレッド量子化優先度値、前記スレッド量子値、またはこれらの組合せを、更新するステップをさらに含む、請求項7に記載の方法。前記選択されたスレッドと関連付けられた作業が完了した場合に、前記選択されたスレッドに対する、スレッド量子化優先度値、スレッド量子値、またはこれらの組合せを、更新するステップをさらに含む、請求項7に記載の方法。複数のスレッドを実行するためのデバイスであって、休止中のスレッドにバケット優先度値を割り当てることによって、前記休止中のスレッドの実行の準備ができた場合に、前記休止中のスレッドと関連付けられたスレッド規定優先度値を、前記休止中のスレッドと関連付けられたスレッド量子化優先度値にマッピングするための手段と、前記休止中のスレッドを、実行の準備ができているキューに追加するための手段と、前記休止中のスレッドと関連付けられた、前記スレッド量子化優先度値、スレッド量子値、またはこれらの組合せを更新するための手段であって、マップを用いて静的に更新するための手段と、バケット優先度値に基づいて動的に更新するための手段とのうちの1つを含む、手段とを含む、デバイス。前記スレッド量子化優先度値が、前記スレッドの実際のランタイムに基づく前記スレッドの優先度値を含む、請求項11に記載のデバイス。前記スレッドを、複数のスレッドを含む特定のバケットの中の別のスレッドにより阻止される前に実行できる、最大のタイムスライスを前記量子値が含む、請求項11に記載のデバイス。量子化優先度値を選択された優先度値にマッピングするための手段をさらに含む、請求項11に記載のデバイス。実行キュー上で実行すべきスレッドを選択するための手段をさらに含む、請求項11に記載のデバイス。前記選択されたスレッドが、最高の量子化優先度値を有するスレッドのグループから選択される、請求項14に記載のデバイス。量子値を規定優先度値にマッピングするための手段をさらに含む、請求項14に記載のデバイス。前記選択されたスレッドを実行するための手段をさらに含む、請求項16に記載のデバイス。前記選択されたスレッドと関連付けられたスレッド量子値が完了した場合に、前記選択されたスレッドに対する、スレッド量子化優先度値、前記スレッド量子値、またはこれらの組合せを、更新するための手段をさらに含む、請求項17に記載のデバイス。前記選択されたスレッドと関連付けられた作業が完了した場合に、前記選択されたスレッドに対する、スレッド量子化優先度値、スレッド量子値、またはこれらの組合せを、更新するための手段をさらに含む、請求項17に記載のデバイス。プロセッサを含むデバイスであって、前記プロセッサが、休止中のスレッドにバケット優先度値を割り当てることによって、前記休止中のスレッドの実行の準備ができた場合に、前記休止中のスレッドと関連付けられたスレッド規定優先度値を、前記休止中のスレッドと関連付けられたスレッド量子化優先度値にマッピングし、前記休止中のスレッドを、実行の準備ができているキューに追加し、前記休止中のスレッドと関連付けられた、前記スレッド量子化優先度値、スレッド量子値、またはこれらの組合せを更新するように動作可能であり、前記更新が、前記プロセッサがマップを用いて静的に更新することと、前記プロセッサがバケット優先度値に基づいて動的に更新することのうちの1つを含む、デバイス。前記スレッド量子化優先度値が、前記スレッドの実際のランタイムに基づく前記スレッドの優先度値を含む、請求項21に記載のデバイス。前記スレッドを、複数のスレッドを含む特定のバケットの中の別のスレッドにより阻止される前に実行できる、最大のタイムスライスを前記量子値が含む、請求項21に記載のデバイス。前記プロセッサが、量子化優先度値を選択された優先度値にマッピングするようにさらに動作可能である、請求項21に記載のデバイス。前記プロセッサが、実行キュー上で実行すべきスレッドを選択するようにさらに動作可能である、請求項21に記載のデバイス。前記選択されたスレッドが、最高の量子化優先度値を有するスレッドのグループから選択される、請求項24に記載のデバイス。前記プロセッサが、量子値を規定優先度値にマッピングするようにさらに動作可能である、請求項24に記載のデバイス。前記プロセッサが、前記選択されたスレッドを実行するようにさらに動作可能である、請求項26に記載のデバイス。前記プロセッサが、前記選択されたスレッドと関連付けられたスレッド量子値が完了した場合に、前記選択されたスレッドに対する、スレッド量子化優先度値、前記スレッド量子値、またはこれらの組合せを、更新するようにさらに動作可能である、請求項27に記載のデバイス。前記プロセッサが、前記選択されたスレッドと関連付けられた作業が完了した場合に、前記選択されたスレッドに対する、スレッド量子化優先度値、スレッド量子値、またはこれらの組合せを、更新するようにさらに動作可能である、請求項27に記載のデバイス。複数のスレッドを実行するためのコンピュータにより実行可能な命令を記録したコンピュータ読み取り可能な記録媒体であって、休止中のスレッドにバケット優先度値を割り当てることによって、前記休止中のスレッドの実行の準備ができた場合に、前記休止中のスレッドと関連付けられたスレッド規定優先度値を、前記休止中のスレッドと関連付けられたスレッド量子化優先度値にマッピングするための少なくとも1つの命令と、前記休止中のスレッドを、実行の準備ができているキューに追加するための少なくとも1つの命令と、前記休止中のスレッドと関連付けられた、前記スレッド量子化優先度値、スレッド量子値、またはこれらの組合せを更新するための少なくとも1つの命令であって、前記更新するステップが、マップを用いて静的に更新するステップと、バケット優先度値に基づいて動的に更新するステップのうちの1つを含む、命令とを含む、記録媒体。前記スレッド量子化優先度値が、前記スレッドの実際のランタイムに基づく前記スレッドの優先度値を含む、請求項31に記載の記録媒体。前記スレッドを、複数のスレッドを含む特定のバケットの中の別のスレッドにより阻止される前に実行できる、最大のタイムスライスを前記量子値が含む、請求項31に記載の記録媒体。量子化優先度値を選択された優先度値にマッピングするための少なくとも1つの命令をさらに含む、請求項31に記載の記録媒体。実行キュー上で実行すべきスレッドを選択するための少なくとも1つの命令をさらに含む、請求項31に記載の記録媒体。前記選択されたスレッドが、最高の量子化優先度値を有するスレッドのグループから選択される、請求項34に記載の記録媒体。量子値を規定優先度値にマッピングするための少なくとも1つの命令をさらに含む、請求項34に記載の記録媒体。前記選択されたスレッドを実行するための少なくとも1つの命令をさらに含む、請求項36に記載の記録媒体。前記選択されたスレッドと関連付けられたスレッド量子値が完了した場合に、前記選択されたスレッドに対する、スレッド量子化優先度値、前記スレッド量子値、またはこれらの組合せを、更新するための少なくとも1つの命令をさらに含む、請求項37に記載の記録媒体。前記選択されたスレッドと関連付けられた作業が完了した場合に、前記選択されたスレッドに対する、スレッド量子化優先度値、スレッド量子値、またはこれらの組合せを、更新するための少なくとも1つの命令をさらに含む、請求項37に記載の記録媒体。したがって、必要とされるのは、1つまたは複数のプロセッサ上で、複数のスレッドを実行する改善されたシステムおよび方法である。複数のスレッドを実行するための方法およびシステムは、ある休止中のスレッドの実行の準備ができた場合に、その休止中のスレッドと関連付けられたスレッド規定優先度値を、その休止中のスレッドと関連付けられたスレッド量子化優先度値にマッピングすることを含む。このマッピングは、休止中のスレッドに、バケット優先度値を割り当てることを含む。そして、休止中のスレッドが、実行する準備ができているキューに追加される。次いで、休止中のスレッドと関連付けられた、スレッド量子化優先度値、スレッド量子値、またはこれらの組合せが更新され得る。この更新は、マップを用いて静的に更新することと、スレッドに割り当てられたバケット優先度値に基づいて動的に更新することのうちの、1つを含み得る。図中、別段に規定されていない限り、類似の参照番号は、様々な図の全体を通じて、類似の部分を指す。例示的なという言葉は、一例、実例または例示となることを意味するように本明細書で使用される。例示的なものとして本明細書で説明する態様は、必ずしも他の態様よりも好ましい、または有利であると解釈されるわけではない。本明細書では、アプリケーションという用語は、オブジェクトコード、スクリプト、バイトコード、マークアップ言語ファイルおよびパッチなど、実行可能コンテンツを有するファイルを含むこともある。加えて、本明細書で言及するアプリケーションは、開かれる必要があり得るドキュメント、またはアクセスされる必要がある他のデータファイルなど、本質的に実行可能ではないファイルを含むこともある。コンテンツという用語は、オブジェクトコード、スクリプト、バイトコード、マークアップ言語ファイル、パッチなど、実行可能コンテンツを有するファイルを含むこともある。加えて、本明細書で言及するコンテンツは、オープンされる必要があり得るドキュメント、またはアクセスされる必要がある他のデータファイルなど、本質的に実行可能ではないファイルを含むこともある。本明細書で使用される場合、構成要素、データベース、モジュール、システムなどの用語は、ハードウェア、ファームウェア、ハードウェアとソフトウェアの組合せ、ソフトウェア、実行中のソフトウェアを問わず、コンピュータ関連のエンティティを指すことが意図されている。たとえば構成要素は、プロセッサ上で作動しているプロセス、プロセッサ、オブジェクト、実行可能ファイル、実行スレッド、プログラムおよびまたはコンピュータであってよいが、これらであることに限定されない。例を挙げると、コンピューティングデバイス上で作動しているアプリケーションとコンピューティングデバイスの両方が構成要素であり得る。1つまたは複数の構成要素は、プロセスおよびまたは実行スレッドの中に存在してよく、1つの構成要素を1つのコンピュータに局在化すること、およびまたは2つ以上のコンピュータに分散することが可能である。加えて、これらの構成要素は、様々なデータ構造を記憶している様々なコンピュータ可読媒体から実行することができる。構成要素は、1つまたは複数のデータパケットを有する信号に従うなどしてローカルプロセスおよびまたはリモートプロセスの方法により通信することができる。最初に図1および図2を参照すると、例示的なポータブルコンピューティングデバイスが示されており、全体的に100と表される。図示のように、PCD100は、ハウジング102を含み得る。ハウジング102は、上側ハウジング部104および下側ハウジング部106を含み得る。図1は、上側ハウジング部104がディスプレイ108を含み得ることを示す。特定の態様において、ディスプレイ108は、タッチスクリーンディスプレイでもよい。上側ハウジング部104は、トラックボール入力デバイス110を含むこともできる。さらに、図1に示されるように、上側ハウジング部104は、電源投入ボタン112および電源切断ボタン114を含み得る。図1に示されるように、PCD100の上側ハウジング部104は、複数のインジケータライト116およびスピーカー118を含み得る。各インジケータライト116は、発光ダイオードでもよい。特定の態様では、図2に示すように、上位ハウジング部分104は下位ハウジング部分106に対して摺動可能である。具体的には、上位ハウジング部分104は下位ハウジング部分106に対してスライド可能であってよい。図2に示すように、下位ハウジング部分106はマルチボタン型キーボード120を含むことができる。特定の態様では、マルチボタン型キーボード120は標準型QWERTYキーボードであり得る。マルチボタン型キーボード120は、上位ハウジング部分104が下位ハウジング部分106に対して移動したときに現れ得る。図2は、PCD100が下位ハウジング部分106上にリセットボタン122を含み得ることをさらに示している。図3を参照すると、ポータブルコンピューティングデバイスの例示的な非限定的態様が示されており、全体的に320と表される。図示のように、PCD100はマルチコアCPU324を含むオンチップシステム322を含む。マルチコアCPU324は、第0のコア325、第1のコア326および第Nのコア327を含み得る。図3に示すように、ディスプレイコントローラ328およびタッチスクリーンコントローラ330がマルチコアCPU324に結合される。次に、オンチップシステム322の外部にあるタッチスクリーンディスプレイ332が、ディスプレイコントローラ328およびタッチスクリーンコントローラ330に結合される。図3は、ビデオエンコーダ334、たとえば位相反転線エンコーダ、順次式カラーメモリエンコーダまたは全米テレビジョン方式委員会エンコーダがマルチコアCPU324に結合されることをさらに示している。さらに、ビデオ増幅器336がビデオエンコーダ334およびタッチスクリーンディスプレイ332に結合される。また、ビデオポート338がビデオ増幅器336に結合される。図3に示すように、ユニバーサルシリアルバスコントローラ340がマルチコアCPU324に結合される。また、USBポート342がUSBコントローラ340に結合される。メモリ344および加入者識別モジュールカード346も、マルチコアCPU324に結合され得る。さらに、図3に示すように、デジタルカメラ348がマルチコアCPU324に結合され得る。例示的な態様では、デジタルカメラ348は、電荷結合デバイスカメラまたは相補型金属酸化物半導体カメラである。図3にさらに示すように、ステレオオーディオコーデック350がマルチコアCPU324に結合され得る。さらに、オーディオ増幅器352がステレオオーディオコーデック350に結合され得る。例示的な態様では、第1のステレオスピーカー354および第2のステレオスピーカー356がオーディオ増幅器352に結合される。図3は、マイクロフォン増幅器358もステレオオーディオコーデック350に結合され得ることを示している。加えて、マイクロフォン360がマイクロフォン増幅器358に結合され得る。特定の態様では、周波数変調ラジオチューナー362がステレオオーディオコーデック350に結合され得る。また、FMアンテナ364がFMラジオチューナー362に結合される。さらに、ステレオヘッドフォン366がステレオオーディオコーデック350に結合され得る。図3は、高周波トランシーバ368がマルチコアCPU324に結合され得ることをさらに示している。RFスイッチ370がRFトランシーバ368およびRFアンテナ372に結合され得る。図3に示すように、キーパッド374がマルチコアCPU324に結合され得る。また、マイクロフォンを備えたモノヘッドセット376がマルチコアCPU324に結合され得る。さらに、バイブレータデバイス378がマルチコアCPU324に結合され得る。図3は、電源380がオンチップシステム322に結合され得ることも示している。特定の態様では、電源380は電力を必要とするPCD100の様々な構成要素に電力を供給する直流電源である。さらに、特定の態様において、電源は、AC電源に接続された交流DC変成器から導かれた充電式DCバッテリまたはDC電源である。図3は、PCD100がデータネットワーク、たとえばローカルエリアネットワーク、パーソナルエリアネットワーク、その他のネットワークにアクセスするために使用できるネットワークカード388も含み得ることをさらに示している。ネットワークカード388は、Bluetoothネットワークカード、WiFiネットワークカード、パーソナルエリアネットワークカード、パーソナルエリアネットワーク超低電力技術ネットワークカード、または当技術分野で知られている任意の他のネットワークカードとすることができる。さらに、ネットワークカード388は、チップに組み込むことができ、すなわち、ネットワークカード388は、チップでのフルソリューションとすることができ、個別のネットワークカード388でなくてもよい。図3に示すように、タッチスクリーンディスプレイ332、ビデオポート338、USBポート342、カメラ348、第1のステレオスピーカー354、第2のステレオスピーカー356、マイクロフォン360、FMアンテナ364、ステレオヘッドフォン366、RFスイッチ370、RFアンテナ372、キーパッド374、モノヘッドセット376、バイブレータ378および電源380は、オンチップシステム322の外部にある。特定の態様において、本明細書で説明する方法のステップのうちの1つまたは複数は、コンピュータプログラム命令としてメモリ344に記憶され得る。これらの命令は、本明細書で説明する方法を実行するために、マルチコアCPU324によって実行され得る。さらに、マルチコアCPU324、メモリ344、またはこれらの任意の組合せは、複数のタスクまたはスレッドを実行するための、本明細書で説明される方法のステップの1つまたは複数を実行するための手段として、機能し得る。マルチコアCPU324、メモリ344、またはこれらの任意の組合せは、スレッド優先度量子化、スレッド量子値、またはこれらの組合せを静的に更新するための、本明細書で説明される方法のステップの1つまたは複数を実行するための手段として、機能し得る。加えて、マルチコアCPU324、メモリ344、またはこれらの任意の組合せは、スレッド優先度量子化、スレッド量子値、またはこれらの組合せを動的に更新するための、本明細書で説明される方法のステップの1つまたは複数を実行するための手段として、機能し得る。また、マルチコアCPU324、メモリ344、またはこれらの任意の組合せは、複数のスレッドの各々に優先度を割り当てるための手段として、機能し得る。図4を参照すると、処理システムが示され、全体的に400と表される。特定の態様では、処理システム400は、図3に関して上述したPCD100に組み込まれ得る。図示のように、処理システム400はマルチコア中央処理装置324、およびマルチコアCPU324に接続されたメモリ344を含み得る。マルチコアCPU324は、第0のコア325、第1のコア326および第Nのコア327を含み得る。第0のコア325は、その上で実行される第0の動的クロックおよび電圧スケーリングアルゴリズム416を含み得る。第1のコア326は、その上で実行される第1のDCVSアルゴリズム417を含み得る。さらに、第Nのコア327は、その上で実行される第NのDCVSアルゴリズム418を含み得る。特定の態様では、各DCVSアルゴリズム416、417、418は、それぞれのコア326、327、416上で独立して実行されることができる。さらに、図示のように、メモリ344は、オペレーティングシステム420を記憶し得る。オペレーティングシステム420はスケジューラ422を含むことができ、スケジューラ422は第1の実行キュー424、第2の実行キュー426、第Nの実行キュー428を含み得る。メモリ344は、第1のアプリケーション430、第2のアプリケーション432および第Nのアプリケーション434も記憶し得る。特定の態様において、アプリケーション430、432、434は、マルチコアCPU324内のコア325、326、327で処理される1つまたは複数のタスク436をオペレーティングシステム420に送ることができる。タスク436は、単一のタスク、スレッド、またはこれらの組合せとして処理または実行され得る。さらに、スケジューラ422は、マルチコアCPU324内で実行するタスク、スレッド、またはそれらの組合せをスケジューリングすることができる。加えて、スケジューラ422は、実行キュー424、426、428にタスク、スレッド、またはこれらの組合せを配置することができる。コア325、326、327は、タスク、スレッド、またはそれらの組合せを、たとえばオペレーティングシステム420によってコア325、326、327でそれらのタスクおよびスレッドを処理または実行するよう命令された場合、実行キュー424、426、428から取り出すことができる。特定の態様では、スケジューラ422、メモリ344、コア325、326、327、またはこれらの任意の組合せは、複数のタスクスレッド436を実行するための、本明細書で説明された方法のステップの1つまたは複数を実行するための手段として、機能し得る。スケジューラ422、メモリ344、コア325、326、327、またはこれらの任意の組合せは、スレッド優先度量子化、スレッド量子値、またはこれらの組合せを静的に更新するための、本明細書で説明される方法のステップの1つまたは複数を実行するための手段としても、機能し得る。さらに、スケジューラ422、メモリ344、コア325、326、327、またはこれらの任意の組合せは、スレッド優先度量子化、スレッド量子値、またはこれらの組合せを動的に更新するための、本明細書で説明される方法のステップの1つまたは複数を実行するための手段として、機能し得る。さらに、スケジューラ422、メモリ344、コア325、326、327、またはこれらの任意の組合せは、複数のスレッドの各々に優先度を割り当てるための手段として、機能し得る。特定の態様では、スレッド優先度は、様々なスレッド436およびそれらの依存関係を分析し、各スレッド436の処理と関連する重要度に基づいて優先度値を割り当てることによって、調整され、または場合によっては操作され得る。並列のスレッドの数が増え、優先度の数が増えるにつれて、それぞれの優先度に基づいてスレッド436を調整することはより複雑になる。本明細書で説明されるように、各スレッドは、規定優先度値、量子化優先度値、および量子値を有し得る。規定優先度値は、たとえば、図5で示され以下で詳細に説明されるバケット504、506、および508に対応する、高い値、中程度の値、または低い値のような、相対的な値として表され得る。量子値は、時間の値、たとえばミリ秒として表され得る。たとえば、ある特定のスレッドは、1ミリ秒、5ミリ秒、10ミリ秒などの量子値を有し得る。各スレッドの規定優先度値、量子化優先度値、および量子値に基づいて、スレッド436は、相対的により重要ではないスレッド436を妨げることなくより重要なスレッド436を処理できるように、処理され得る。さらに、複数のスレッドが実質的に同時に実行されており、実質的に同じ重要度、すなわち優先度を有する場合には、各々のスレッドが、いずれかのスレッドを妨げることなく処理に進めるように、スレッドは、たとえば量子値を用いることで、互いにハンドシェークすることができる。図5は、優先順位付けシステムを示し、全体的に500と表される。示されるように、量子化優先順位付けシステム500は、スケジューラ422を含み得る。スケジューラ422は、第1のスレッドバケット504へのアクセスを有し得る。さらに、スケジューラ422は、第2のスレッドバケット506へのアクセスを有し得る。示されるように、スケジューラ422は、第Nのスレッドバケット508へのアクセスも有し得る。特定の態様では、示されるように、スケジューラ422は、高い優先度、中程度の優先度、および低い優先度という3つの優先度値に対応する、3つのスレッドバケット504、506、508へのアクセスを有し得る。しかし、スケジューラ422は、他の中間の優先度値に対応する、4つのスレッドバケット、5つのスレッドバケット、6つのスレッドバケットなどへのアクセスを有してもよいことが、理解され得る。特定の態様では、各スレッドバケット504は、バケット優先度値510、512、514を割り当てられ得る。具体的には、第1のスレッドバケット504は、第1のバケット優先度値510を割り当てられ得る。第2のスレッドバケット506は、第2のバケット優先度値512を割り当てられ得る。また、第Nのスレッドバケット508は、第Nのバケット優先度値514を割り当てられ得る。一態様では、バケット優先度値510、512、514は互いに関連があり得る。たとえば、第1のバケット優先度値510は、高いバケット優先度値であってよい。第2のバケット優先度値512は、中間のバケット優先度値であってよい。さらに、第3のバケット優先度値514は、低いバケット優先度値であってよい。以下で説明されるスレッドは、各スレッドと関連付けられた規定優先度値に基づいて、各バケット504、506、508に配置され得る。同様の規定優先度値を有するスレッドは、同じバケット504、506、508に配置され得る。さらに図5を参照すると、第1のバケット504は、第1のスレッド520および第2のスレッド522を含み得る。第1のスレッド520は、規定優先度値524、量子化優先度値526、および量子値528を含み得る。規定優先度値524は、スレッドにより規定される優先度値である。規定優先度値は、スレッドの実行に対して優先度を与えるのに用いられる。たとえば、優先度値が高いと、特定のスレッドを、より低い優先度値を有するスレッドよりも前に実行させることができる。量子化優先度値526は、スレッドの実行情報に少なくとも一部基づいて求められる、優先度値であり得る。量子値528は、あるスレッドが、同じバケットの別のスレッドにより阻止される前に実行されることが許可され得る、タイムスライスであってよい。示されるように、第2のスレッド522は、規定優先度値530、量子化優先度値532、および量子値534を含み得る。図5に示されるように、第2のバケット506は、第3のスレッド540および第4のスレッド542を含み得る。第3のスレッド540は、規定優先度値544、量子化優先度値546、および量子値548を含み得る。示されるように、第4のスレッド542は、規定優先度値550、量子化優先度値552、および量子値554を含み得る。第Nのバケット508は、第N1のスレッド506および第Nのスレッド562を含み得る。第N1のスレッド560は、規定優先度値564、量子化優先度値566、および量子値568を含み得る。示されるように、第Nのスレッド562は、規定優先度値570、量子化優先度値572、および量子値574を含み得る。特定の態様では、スレッド520、522、540、542、560、562は、各スレッドと関連付けられたランタイム情報に基づいて、バケット504、506、508の間で、スケジューラ422により移動され得る。たとえば、第1のスレッド520と関連付けられた量子化優先度値526は、第1のバケット504と関連付けられたバケット優先度値510よりも低くなり得る。第1のスレッド520の量子化優先度値526が、第1のバケット504のバケット優先度値510よりも低くなると、第1のスレッド520は、第1のスレッド520の量子化優先度値526に応じて、第1のバケット504から、第2のバケット506と第Nのバケット508のいずれかに、スケジューラ422により移動され得る。別の例として、第3のスレッド540と関連付けられた量子化優先度値546は、第2のバケット506と関連付けられたバケット優先度値512よりも大きくなり得る。第3のスレッド540の量子化優先度値546が、第2のバケット506と関連付けられたバケット優先度値512よりも大きくなると、第3のスレッド540は、第2のバケット506から第1のバケット504に、スケジューラ422により移動され得る。図5はさらに、スケジューラ422にアクセス可能な、量子化優先度値マップ580および量子値マップ582を示す。スケジューラ422は、各スレッド520、522、540、542、560、562と関連付けられた量子化優先度値526、532、546、552、566、572を、各スレッド520、522、540、542、560、562の規定優先度値524、530、544、550、564、570にマッピングし、各量子化優先度値を、適切なスレッド520、522、540、542、560、562と関連付けて、量子化優先度値マップ580に保存することができる。加えて、スケジューラ422は、各スレッド520、522、540、542、560、562と関連付けられた量子値528、534、548、554、568、574を、各スレッド520、522、540、542、560、562の規定優先度値524、530、544、550、564、570にマッピングし、各量子値を、適切なスレッド520、522、540、542、560、562と関連付けて、量子値マップ582に保存することができる。量子化優先度値マップ580は、バケットの優先度の割り当てに関係なく、量子化優先度値に基づいて、全てのスレッド436を一覧にする。同様に、量子値マップ582は、バケットの優先度の割り当てに関係なく、量子値に基づいて、全てのスレッド436を一覧にする。優先順位付けシステム500は、スケジューラ422が、割り当てられたバケット504、506、および508の中でスレッド436を管理し、実行時間ランタイム中に優先度が転換または変化し得るときに、スレッド436を他のバケット504、506、および508に再び割り当てることを、可能にする。ランタイム中の、それぞれの割り当てられたバケット504、506、および508の中でのスレッド436のこの管理は、スレッド優先度の動的な更新と呼ばれ得る。一方、量子化優先度値マップ580および量子値マップ582により、スケジューラ422は、個々のバケットの割り当てとは無関係に、かつさほど頻繁ではないがバケットの割り当ての追跡と関連して、複数のスレッド436の優先度を追跡して更新することもできる。個々のバケットの割り当てとは無関係に、かつさほど頻繁ではないがバケットの割り当ての追跡と関連して、マップ580および582に基づいて複数のスレッド436の優先度をこのように追跡して更新することは、一般に、スレッド優先度の静的な更新と呼ばれる。図6は、複数のスレッドの各々に優先度を割り当てるための方法を示し、全体的に600と表される。ブロック602において開始し、スケジューラ422は、スレッド602の規定優先度値を受け取ることができる。方法600は、ブロック606に進むことができ、スケジューラ422は、スレッドの量子化優先度値を求めることができる。ブロック608に移り、スケジューラ422は、量子化優先度値を、規定優先度値およびスレッドと関連付けることができる。さらに、ブロック610において、スケジューラ422は、量子値を、規定優先度値およびスレッドと関連付けることができる。その後、方法600は終了することができる。動作中、スケジューラ422は、各スレッドの規定優先度値、量子化優先度値、および量子値を利用して、各スレッドの処理を制御することができる。たとえば、高い規定優先度値または量子化優先度値を有するスレッドは、低い規定優先度値または量子化優先度値を有するスレッドよりも前に、実行され得る。2つのスレッドが、実質的に同じ規定優先度値または量子化優先度値を有し、同じバケットに位置する場合、2つのスレッドは、関連する量子値に基づいて処理され得る。そのような場合、一方の特定のスレッドが5ミリ秒の量子値を有する場合、もう一方のスレッドは1ミリ秒の量子値を有する。5ミリ秒の量子値を有するスレッドは、5ミリ秒の間、または完了するまで実行することを許され、そして、1ミリ秒の量子値を有するスレッドが、ランまたは実行を許される。特定の態様では、ラウンドロビンスケジューリングにより、2つのスレッドの一方または両方がそれぞれの作業を完了するまで、スレッドの実行をその2つのスレッドの間で交互に行うことを、続けることができる。図7を参照すると、複数のスレッドを実行する方法が示されており、全体的に700と表される。特定の態様では、オペレーティングシステムスレッドプロセススケジューラ422が、少数の別個のバケット504、506、508へ規定スレッド優先度を量子化するために、修正され得る。各バケットは特定の優先度を有してもよく、特定の優先度のスレッドの全てが、バケットの優先度を割り当てられ得る。さらに、特定のバケットの中のスレッドの各々は、優先度が同じであるかのように、スケジューラ422によりランされ、または場合によっては実行され得る。しかし、特定のバケットの中の各スレッドはまた、スケジューラ量子値、すなわち、同じバケットの別のスレッドにより阻止される前にスレッドを実行できる最大のタイムスライスを、割り当てられ得る。スケジューラ422はさらに、各スレッドに割り当てられたスケジューラ量子値に基づいて、各バケットの中のスレッドの優先度を量子化することができる。たとえば、スケジューラ422は、3つのバケット、たとえば、優先度の高いバケット、優先度が中程度のバケット、および優先度の低いバケットのうちの1つに、各スレッドを配置することができる。そして、各バケットの中の各スレッドの優先度は、スケジューラ量子値に量子化され得る。実行中、特定のバケットの中のスレッドは、別のバケットの中のスレッドよりも前に実行されてよい。たとえば、優先度が中程度および低いバケットよりも前に優先度が高いバケットが実行される、優先度が低いバケットよりも前に優先度が中程度のバケットが実行される、などである。特定のバケットの中のスレッドは、各スレッドの具体的なスケジューラ量子値に基づいて、実行され得る。各スレッドは、ビデオアプリケーション、音声アプリケーション、電子メールアプリケーション、ワイヤレスネットワークアプリケーション、セルラーネットワークアプリケーション、ショートメッセージサービスアプリケーション、通信アプリケーション、セキュリティアプリケーション、カレンダアプリケーション、インスタントメッセージングアプリケーション、スチールカメラアプリケーション、全地球測位システムアプリケーション、ブラウザアプリケーション、メモ帳アプリケーション、クロックアプリケーション、ゲームアプリケーション、計算機アプリケーション、銀行業務アプリケーション、パスワードキーパーアプリケーション、ヘルプアプリケーション、電子商取引アプリケーション、ソフトウェア配信アプリケーション、検索アプリケーション、オプションアプリケーション、確立アプリケーション、電話アプリケーション、接続管理アプリケーション、セキュリティアプリケーション、任意の他のアプリケーション、またはそれらの組合せと関連付けられる、ワークロードの一部であってよい。ブロック704で開始して、休止中のスレッド706を実行する準備ができた場合、スケジューラ422は、3つの異なる優先度を有する3つのバケットを作成することによって、スレッド規定優先度値を量子化優先度値にマッピングすることができる。特定の態様では、量子化優先度値は、特定のスレッドに対して求められた実際のランタイムに基づいて、求められ得る。特定の態様では、スケジューラ422は、図5の量子化マップ580のように、スレッド規定優先度値を量子化優先度値に静的にマッピングすることができる。別の態様では、スケジューラ422は、図5の量子マップ582のように、スレッド規定優先度値を量子値に静的にマッピングすることができる。特定の態様では、休止中のスレッド706は、まだ実行キューにはないスレッド、実行をちょうど開始したスレッド、またはこれらの組合せであってよい。ブロック708において、スケジューラ422は、実行の準備ができているキューにスレッドを追加することができる。さらに、ブロック710において、スケジューラ422は、スレッド量子化優先度値、スレッド量子値、またはこれらの組合せを、更新することができる。特定の態様では、スケジューラ422は、スレッド量子化優先度値、スレッド量子値、またはこれらの組合せを、図8の静的な更新方法710Aまたは図9の動的な更新方法710Bを用いることで、以下で説明されるように静的に更新することができる。ブロック712に移り、スケジューラ422は、実行されるべき、すなわちプロセッサにおいて実行される、実行キュー上で最高の量子化優先度値を有する次のスレッドを選択することができる。特定の態様では、スケジューラ422は、ラウンドロビン方式で、最高の量子化優先度値を有する次のスレッドを選択することができる。または、スケジューラ422は、当技術分野でよく知られる任意の他の方式でこの選択を行ってもよい。ブロック714において、スケジューラ422は、スレッド規定優先度値を、スレッド量子値、すなわちタイムスライスにマッピングすることができる。その後、スレッドは、プロセッサにおいてランされ、または場合によっては実行され得る。プロセッサは、シングルコアCPU、マルチコアCPU、複数のシングルコアCPU、複数のマルチコアCPU、またはそれらの組合せであってよい。判定718に移り、スケジューラ422は、実行中のスレッド716と関連付けられた作業が完了したかどうかを判定することができる。作業が完了していない場合、方法700は、ブロック710に戻ることができ、本明細書で説明するように継続することができる。判定718において、作業が完了している場合、方法700は、ブロック720に進むことができ、スレッドは休止状態に入ることができる。その後、方法700は終了することができる。図8を参照すると、スレッド優先度の量子化、スレッド量子値、またはこれらの組合せを静的に更新する方法710Aが示され、全体的に710Aと表される。図8に示される方法710Aは、スレッド優先度の量子化、スレッド量子値、またはこれらの組合せを更新するために、スケジューラ422により実行され得る。ブロック802において開始して、スケジューラ422は、特定のスレッドと関連付けられる平均のランタイムを更新することができる。ブロック804において、スケジューラ422は、スレッド規定優先度値を、スレッド量子化優先度値に静的にマッピングすることができる。言い換えると、図5の量子化スレッド優先度マップ580の中での位置が、スレッドと関連付けられた量子化優先度値と等しくなるように設定され得る。特定の態様では、量子化優先度値マップは、スレッドの優先度を量子化された優先度の1つにマッピングする、静的な表であってよい。ブロック806に移り、スケジューラ422は、スレッド規定優先度値を、スレッド量子値に静的にマッピングすることができる。言い換えると、図5のスレッド量子値マップ582の中での位置が、スレッドと関連付けられたスレッド量子値と等しくなるように設定され得る。スレッド量子値マップは、スレッドの優先度を、スレッド量子値、すなわちタイムスライスにマッピングする、静的な表であってよい。その後、方法710Aは終了することができる。図9は、スレッド優先度の量子化、スレッド量子値、またはこれらの組合せを動的に更新する方法710Bを示す。方法は、全体的に710Bと表される。さらに、図9に示される方法710Bは、スレッド優先度の量子化、スレッド量子値、またはこれらの組合せを更新するために、スケジューラ422により実行され得る。ブロック902において開始して、スケジューラ422は、特定のスレッドと関連付けられる平均のランタイムを更新することができる。ブロック904において、スケジューラ422は、量子値の値を、平均ランタイムの値と等しくなるように設定することができる。量子値の値は、スレッドと関連付けられた現在の量子値であってよい。さらに、平均ランタイムの値は、休止期間と休止期間の間の、スレッドが実行される平均の期間であってよい。判定906に移り、スケジューラ422は、量子化優先度の値が、最大優先度の値よりも小さいかどうかを判定することができ、ここで、量子化優先度の値は、スレッドと関連付けられた現在の量子化優先度値であり、最大優先度の値は、スレッドを実行すべき最大の優先度である。量子化優先度の値が、最大優先度の値よりも小さい場合、方法710Bは判定908に進むことができ、スケジューラ422は、平均ランタイムの値が最小平均ランタイムの値よりも小さいかどうかを判定することができ、ここで、最小平均ランタイムの値は、特定のバケットの中の全てのスレッドが維持すべき、最小の平均ランタイムである。平均ランタイムの値が、最小平均ランタイムの値よりも小さい場合、方法710Bはブロック910に進むことができ、スケジューラ422は、次により大きな量子化優先度値に等しくなるように、量子化優先度の値を設定することができる。すなわち、スレッドは、現在のバケットの優先度よりも高い優先度を有する、バケットの列の中の次のバケットに、昇格する。その後、方法710Bは判定906に戻ることができ、方法710Bは本明細書で説明するように継続することができる。判定908に戻り、平均ランタイムの値が、最小平均ランタイムの値よりも小さくない場合、すなわちそれ以上である場合、方法710Bは判定912に進むことができる。さらに、判定906に戻り、量子化優先度の値が、最大優先度の値よりも小さくない場合、すなわちそれ以上である場合も、方法710Bは判定912に進むことができる。判定912において、スケジューラ422は、量子化優先度の値が、最小優先度の値よりも大きいかどうか判定することができ、ここで、最小優先度の値は、スレッドを実行すべき最小の優先度である。量子化優先度の値が、最小優先度の値よりも大きい場合、方法710Bは判定914に進むことができ、スケジューラ422は、平均ランタイムの値が最大平均ランタイムの値よりも大きいかどうかを判定することができ、ここで、最大平均ランタイムの値は、特定の、すなわち現在のバケットの中の全てのスレッドが維持すべき、最大の平均ランタイムである。平均ランタイムの値が、最大平均ランタイムの値よりも大きい場合、方法710Bはブロック916に進むことができ、スケジューラ422は、次に小さな量子化優先度値に等しくなるように、量子化優先度の値を設定することができる。すなわち、スレッドは、現在のバケットの優先度よりも低い優先度を有する、バケットの列の中の次のバケットに、降格される。その後、方法は判定912に戻ることができ、方法710Bは本明細書で説明するように継続することができる。判定914に戻り、平均ランタイムの値が、最大平均ランタイムの値よりも大きくない場合、すなわちそれ以下である場合、方法710Bは図10の判定1002に進むことができる。判定912に戻り、量子化優先度の値が、最小優先度の値よりも大きくない場合、すなわちそれ以下である場合も、方法710Bは図10の判定1002に進むことができる。図10の判定1002において、スケジューラ422は、平均スケジューリング時間の値が、最大平均スケジューリング時間の値よりも大きいかどうか判定することができ、ここで、平均スケジューリング時間の値は、スレッドが特定のバケットの中にある場合に、スレッドが実行キュー上に配置された後に開始するまでにかかる平均の時間であり、最大平均スケジューリング時間の値は、特定のバケットに対して望まれる最大の平均スケジューリング時間であってよい。特定の態様では、スレッドの配置は、最初の配置であってもよく、または、スレッドが実行され量子値を使い果たした後の、再配置であってもよい。平均スケジューリング時間の値が、最大平均スケジューリング時間の値よりも大きくない場合、すなわちそれ以下である場合、方法710Bは終了することができる。また、平均スケジューリング時間の値が最大平均スケジューリング時間の値よりも大きい場合、方法710Bは判定1004に進むことができ、スケジュールは、最大スレッド量子値の値が最小スレッド量子値の値よりも大きいかどうかを判定することができ、ここで、最大スレッド量子値の値は、特定のバケットの中の任意のスレッドに対する最大の量子値であり、最小スレッド量子値の値は、特定のバケットの中の任意のスレッドに対して望まれる最小のスレッド量子値である。最大スレッド量子値の値が最小スレッド量子値の値よりも実際に大きい場合は、方法710Bはブロック1006に進むことができる。ブロック1006において、スケジューラ422は、量子値の値を整数1だけ下げることができ、ここで量子値の値は、特定のバケットの中の最大のスレッド量子値である。さらに、ブロック1006において、スケジューラ422は、平均スケジューリング時間の値を整数1だけ下げることができる。その後、方法710Bは判定1002に戻ることができ、方法710Bは本明細書で説明するように継続することができる。判定1004に戻り、最大スレッド量子値の値が、最小スレッド量子値の値よりも大きくない場合、すなわちそれ以下である場合、方法710Bは判定1008に進むことができる。判定1008において、方法710Bは、最も低い最小スレッド優先度の値が優先度の値よりも小さいかどうか判定することができ、ここで、最も低い最小スレッド優先度の値は、特定のバケットの中の任意のスレッドに対する最も低い最小の優先度であり、優先度の値は、特定のバケットの優先度である。最も低い最小スレッド優先度の値が、優先度の値よりも小さくない場合、すなわちそれ以上である場合、方法710Bは終了することができる。逆に、最も低い最小スレッド優先度の値が、優先度の値よりも小さい場合は、方法710Bはブロック1010に進むことができる。ブロック1010において、スケジューラ422は、量子化優先度の値を、次のより小さな量子化優先度値と等しくなるように設定することができ、ここで、最低スレッドは、最も低い最小の優先度を有するスレッドである。すなわち、最も低い最小の優先度を有するスレッドは、現在のバケットの優先度よりも低い優先度を有する、バケットの列の中の次のバケットに、降格される。さらに、ブロック1010において、スケジューラ422は、平均スケジューリング時間の値を、平均スケジューリング時間の値から量子値の値を引いたものと、0との、大きい方に等しくなるように設定することができ、ここで、量子値の値は、現在のバケットの中で最も低い最小の優先度を有するスレッドの、量子値である。その後、方法710Bは判定1002に戻ることができ、方法710Bは本明細書で説明するように継続することができる。本明細書で説明する方法ステップは、必ずしも説明どおりの順序で実施する必要はないことを理解されたい。さらに、その後、次いで、次になどの語は、ステップの順序を限定することを意図していない。これらの語は、方法ステップの説明を通じて読者を案内するために使用されているにすぎない。さらに、本明細書で説明する方法はポータブルコンピューティングデバイス上で実行可能なものとして説明している。PCDはモバイル電話デバイス、携帯情報端末デバイス、スマートブックコンピューティングデバイス、ネットブックコンピューティングデバイス、ラップトップコンピューティングデバイス、デスクトップコンピューティングデバイス、またはそれらの組合せであってよい。さらに、本明細書で説明される方法ステップは、シングルコアプロセッサ、マルチコアプロセッサ、複数のシングルコアプロセッサ、複数のマルチコアプロセッサ、またはそれらの任意の組合せ上で実行され得る。本明細書で説明される構成により、システムおよび方法は、スレッドの優先度を、少数のスケジューリング可能な優先度と、スレッドに対するスケジューラの量子値とに、量子化することができる。さらに、システムおよび方法は、複数のスレッドが同じ実質的な優先度に量子化された場合に、優先度の高いスレッドが連続的に実行されることによって引き起こされる、優先度の低いスレッドの完全な妨害を実質的に防ぐことができる。システムおよび方法はまた、複数のスレッドが同じ実質的な優先度に量子化された場合に、優先度の高いスレッドが連続的に実行されることによって、優先度の低いスレッドが妨害される最大の期間の限度を、実質的に短くすることもできる。特定の態様では、本明細書のシステムおよび方法は、スレッドの優先度により引き起こされる競合状態および妨害を追跡する際の複雑さを、たとえば、スレッドの優先度の数を減らすことによって、実質的に低減することができる。さらに、本明細書で説明されるシステムおよび方法は、スレッドがスケジューラの実行キュー上にあるときに、規定優先度の高いスレッドが、他のスレッドを妨害することなく、より大きな割合の処理時間を得られるようにし得る。本明細書のシステムおよび方法は、さらに、実質的な優先度を変えることなく、スレッドのCPU利用率を向上させるように規定スレッド優先度を変更することを可能にし得るので、望ましくない、または場合によっては予期しない、他のスレッドの妨害およびまたは競合状態をもたらさないようにし得る。特定の態様では、本明細書のシステムおよび方法は、スケジューリング可能な優先度のレベルの数を減らすことで、スレッドの妨害を実質的に減らすことができる。規定優先度値をより少数の優先度に量子化して、各スレッドをタイムスライスに分けることによって、規定優先度が異なるスレッドが同じ量子化優先度値にマッピングされた場合はいつでも、たとえば、優先度の高いスレッドが常に実行されることにより引き起こされる完全な妨害を、実質的に防ぐことができる。さらに、規定優先度値をより少数の優先度に量子化して、各スレッドをタイムスライスに分けることによって、たとえば、優先度の高いスレッドが常に実行されることにより引き起こされる妨害の長さを、同じ量子化優先度値にマッピングされ同時に実行されるようにスケジューリングされた全ての他のスレッドの、累積のタイムスライスの最大値にまで、実質的に短くすることができる。別の態様では、規定優先度値をより少数の優先度に量子化することによって、妨害およびまたは競合状態が起きる可能性が実質的に下がる。なぜなら、そのような状態が存在しないことを確認するのに必要な分析は、関与する優先度の組合せの数によるからである。本明細書で説明されるシステムおよび方法は、優先度の高いスレッドにより高い量子値をマッピングすることによって、規定優先度の高いスレッドが、より長いCPU時間を得られるようにし得る。特定の態様では、スレッド量子値が高いほど、スレッドは、阻止される前により長くランまたは実行され得る。したがって、優先度の低いスレッドが実行を許可され得る場合でも、スレッドは、潜在的に高い割合のCPU利用率を有し得る。さらに、スレッド量子化優先度値が同じままになるようにスレッド規定優先度値を変えても、スレッドの実質的な優先度は変わらず、デッドロックおよびまたは競合状態の基本的な増加にはつながらない。1つまたは複数の例示的な態様では、説明した機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの組合せで実装することができる。ソフトウェアで実装した場合、これらの機能を機械可読媒体すなわちコンピュータ可読媒体などのコンピュータプログラム製品に記憶すること、またはそのようなコンピュータプログラム製品上の1つもしくは複数の命令あるいはコードとして送信することができる。コンピュータ可読媒体は、コンピュータ記憶媒体と通信媒体の両方を含み、1つの場所から別の場所へのコンピュータプログラムの転送を容易にするあらゆる媒体を含む。記憶媒体は、コンピュータによってアクセスされ得る任意の利用可能な媒体であってよい。限定ではなく、例として、そのようなコンピュータ可読媒体は、RAM、ROM、EEPROM、CDROM、または他の光ディスク記憶装置、磁気ディスク記憶装置もしくは他の磁気記憶デバイス、または命令もしくはデータ構造の形式で所望のプログラムコードを伝送もしくは記憶するために使用でき、コンピュータによってアクセスされ得るその他の媒体を含むことができる。また、あらゆる接続がコンピュータ可読媒体と適切に呼ばれる。たとえば、ソフトウェアがウェブサイト、サーバ、または他のリモートソースから同軸ケーブル、光ファイバーケーブル、より対線、デジタル加入者回線、または赤外線、無線およびマイクロ波などのワイヤレス技術を使用して送信される場合、同軸ケーブル、光ファイバーケーブル、より対線、DSL、または赤外線、無線およびマイクロ波などのワイヤレス技術は、媒体の定義に含まれ得る。本明細書で使用するディスクは、コンパクトディスク、レーザディスク、光ディスク、デジタル多目的ディスク、フレキシブルディスクおよびブルーレイディスクを含み、diskは通常、磁気的にデータを再生し、discはレーザで光学的にデータを再生する。上記の組合せもコンピュータ可読媒体の範囲内に含まれるものとする。選択された態様について詳細に説明し、詳述してきたが、以下の請求項によって定められた本発明の趣旨および範囲から離れることなく、そのような態様において様々な代替および改変を実施できることが理解されよう。