タグ付けされた質問 「multithreading」

マルチスレッドを使用すると、同じリソースを共有する単一のプロセスのコンテキスト内に複数のスレッドを存在させることができますが、独立して実行できます。

8
スレッドはいくつ必要ですか?
レンダリングとロジック、またはそれ以上のスレッドを別々に持つべきですか? 私は、データの同期によって引き起こされるパフォーマンスの大幅な低下を認識しています(相互排他ロックは言うまでもありません)。 私はこれを極端に考え、考えられるすべてのサブシステムのスレッドを実行することを考えてきました。しかし、私も物事が遅くなるのではないかと心配しています。(たとえば、入力スレッドをレンダリングスレッドまたはゲームロジックスレッドから分離するのは正気ですか?)データの同期が必要な場合、それは無意味になりますか、さらに遅くなりますか?

5
Dwarf Fortressは、パフォーマンスを失うことなく、どのように多くのエンティティを追跡しますか?
ドワーフ要塞では、数百のドワーフ、動物、ゴブリンなどを一度にゲームに入れることができ、それぞれに独自の複雑なAIと経路探索ルーチンがあります。私の質問は、これがどのように顕著な減速を引き起こさないのですか?各Dwarfは独自のスレッドで実行されますか?

6
マルチスレッドゲームまたはゲームエンジンの設計と開発に関する最良のリソースは何ですか?
マルチスレッドゲームまたはゲームエンジンの設計と開発に関する最良のリソースは何ですか?これは明らかにコンピューターが向かう場所であるため、このトピックを研究するつもりであり、どのようなリソースと例があるかを知りたいと思います。

5
ゲームの俳優は自分自身を描く責任がありますか?
私はゲーム開発は初めてですが、プログラミングは初めてです。 私は(再び)JavaScriptのcanvas要素を使用してPongタイプのゲームで遊んでいます。 Paddle次のプロパティを持つオブジェクトを作成しました... width height x y colour 次のPongようなプロパティを持つオブジェクトもあります... width height backgroundColour draw()。 draw()現在、メソッドはをリセットしてcanvasおり、そこで問題が発生しました。 必要があるPaddleオブジェクトが持つdraw()その描画方法は責任、または必要があるdraw()のPongオブジェクトがその役者を描くための責任がある(私が間違ってる場合、私はそれが正しい用語であると仮定し、私を修正してください)。 私はのためにそれがadvantagousだろうと考え出しPaddle自体を描画するために、私は2つのオブジェクトをインスタンス化するように、PlayerとEnemy。それはでなかった場合Pongのdraw()、私は二度同様のコードを記述する必要があると思います。 ここでのベストプラクティスは何ですか? ありがとう。

4
Unityでメインスレッドをフリーズしない方法
計算量の多いレベル生成アルゴリズムがあります。そのため、呼び出すと常にゲーム画面がフリーズします。ゲームがまだロード画面をレンダリングし続けている間に、ゲームがフリーズしていないことを示すために、関数を2番目のスレッドに配置するにはどうすればよいですか?

8
ゲームはどのようにしてすべてのキャラクターを一度に処理できますか?
この質問は、ゲームが一度に非常に多くのキャラクターを処理する方法についての知識を得るためのものです。私はゲームに慣れていないので、事前にご容赦ください。 例 タワーが構築され、各タワーが一定の速度で発射物を放出する15のタワースロットがあるタワーディフェンスゲームを作成しています。言うことができます毎秒は、2回の発射は、塔のそれぞれによって作成され、そこにある戦場に行進敵は、70を言うことができます、彼らが動き回るように変化れる、などのHPなどの属性の10種類、マナ、各(戦場)。 概要 タワーカウント = 1 秒間に各タワーで作成される 15の発射物 = 2 1秒間に作成される発射物の総数 = 30 戦場でのユニット数 = 70 さて、ゲームはこれらの30個の発射体と70個のユニットを、100個の異なるスレッド(PCにとっては大きすぎる)またはそれらすべてを移動させ、値を減らすなどの1つのスレッドで処理することで処理しますか(少し遅くなります) 、 おもう)? 私はこれについて手がかりを持っていないので、誰がこれがどのように機能するかについて私をガイドできますか?

2
Androidゲームで使用するスレッドの数はいくつですか?
少なくとも、OpenGL AndroidゲームにはUIスレッドとによって作成されたレンダラースレッドがありGLSurfaceViewます。 Renderer.onDrawFrame()最大のFPSを取得するために最小限の作業を行う必要があります。物理学、AIなどはすべてのフレームを実行する必要はないため、それらを別のスレッドに入れることができます。今、私たちは持っています: レンダラースレッド-アニメーションの更新とポリゴンの描画 ゲームスレッド-ロジックと定期的な物理学、AIなどの更新 UIスレッド-Android UI相互作用のみ UIスレッドをブロックしたくないので、ゲームロジック用にもう1つのスレッドを実行します。たぶんそれは必要ないでしょうか?レンダラースレッドでゲームロジックを実行する理由はありますか?

7
マルチスレッド2D重力計算
私は宇宙探査ゲームを構築しており、現在重力に取り組んでいます(XNAを使用したC#で)。 重力はまだ調整が必要ですが、それを行う前に、物理計算でパフォーマンスの問題に対処する必要があります。 これは100個のオブジェクトを使用しており、通常、物理計算なしで1000個のオブジェクトをレンダリングすると300 FPS(私のFPSキャップ)をはるかに超えますが、10個以上のオブジェクトがゲーム(および実行される単一スレッド)を物理計算を行う際のひざ。 スレッドの使用状況を確認したところ、最初のスレッドはすべての作業から自分自身を殺していたため、別のスレッドで物理計算を行う必要があると考えました。ただし、別のスレッドでGravity.csクラスのUpdateメソッドを実行しようとすると、GravityのUpdateメソッドに何も含まれていなくても、ゲームはまだ2 FPSになります。 Gravity.cs public void Update() { foreach (KeyValuePair<string, Entity> e in entityEngine.Entities) { Vector2 Force = new Vector2(); foreach (KeyValuePair<string, Entity> e2 in entityEngine.Entities) { if (e2.Key != e.Key) { float distance = Vector2.Distance(entityEngine.Entities[e.Key].Position, entityEngine.Entities[e2.Key].Position); if (distance > (entityEngine.Entities[e.Key].Texture.Width / 2 + entityEngine.Entities[e2.Key].Texture.Width / 2)) …

3
ゲームが100%CPUを使用するのは正常ですか?
ゲームエンジンにマルチスレッド入力処理を実装しました。OSをポーリングして入力を収集し、タイムスタンプを付けるコードは個別のスレッドにあり、メインスレッドの各フレームは、収集した入力を論理的なゲーム時間。それはすべて動作しますが、このセットアップではCPUの100%を使用しています。コアは2つあり、ゲームの実行中は100%になります。 他のゲームもチェックして、彼らもそうするかどうかを確認しました。たとえば、SkyrimとDoom 3は60%をわずかに超えるCPUで問題ないようです。 マルチスレッド入力を使用するゲームが100%CPUを使用することは許容されますか?そうでない場合、そのようなゲームが入力スレッドによるCPU使用率を下げるために使用するトリックは何ですか?

3
マルチプラットフォームマルチスレッド:本当の課題は何ですか?
SDLのようなライブラリは、スレッド化のためのクロスプラットフォームラッパーAPIを提供しますが、これが非常に異なるプラットフォーム(デスクトップ/モバイル)でのゲームの簡単な開発に直接つながると考えるのは単純だと思います。 次の点を考慮して、この方法で開発に取り組む最良の方法は何ですか(クロスプラットフォームスレッドAPIが与えられた場合): 異なる数のコア コアごとに大幅に異なる処理機能 一般的に異なるシステムアーキテクチャ、たとえば。キャッシュ、RAM、およびI / Oアクセスのさまざまなレイテンシ これを行う唯一の方法は、サポートする各デバイスごとに実行できるスレッド数を評価し、最小公分母が何であるかを調べることだと感じています。ただし、これにより、利用可能な処理スループットの合計量に関して、私はまだ暗闇の中に残ります。これを効果的に行う唯一の方法は、開発中、サポートするつもりの最低スペックのモバイルデバイス向けに積極的に開発することだけだと思いますか?-すなわち、最小公分母?これで大体十分でしょうか?それともこれ以上のものがありますか? 編集:私の質問がまだ完全に回答されているとは思わないので、他の人がこれについてさらに経験を提供してください。

6
補間とスレッド化のデータ構造?
私は最近、ゲームでフレームレートのジッターの問題に対処していますが、最適な解決策は、クラシックなFix Your Timestepで Glenn Fiedler(ゲームのGaffer)によって提案されたものだと思われます!記事。 今-私はすでに更新のために固定タイムステップを使用しています。問題は、レンダリングのために提案された補間を行っていないことです。その結果、レンダリングレートが更新レートと一致しない場合、フレームが2倍またはスキップされます。これらは視覚的に顕著です。 それで、ゲームに補間を追加したいと思います-そして、これをサポートするために他の人がどのようにデータとコードを構造化したか知りたいです。 明らかに、レンダラーに関連するゲーム状態情報の2つのコピーを(どこで/どのように)保存する必要があります。 さらに-これはスレッドを追加するのに適した場所のようです。更新スレッドはゲーム状態の3番目のコピーで動作し、他の2つのコピーをレンダリングスレッドの読み取り専用のままにしておくことができると思います。(これはいい考えですか?) -ゲームの状態の二、三のバージョンを持つことは、パフォーマンスを紹介してできているようですはるかにもっと重要なこと-信頼性と開発者の生産性の問題を、単に1つのバージョンを持つに比べて。ですから、私はこれらの問題を軽減する方法に特に興味があります。 特に注意すべきなのは、ゲームの状態に対するオブジェクトの追加と削除の処理方法の問題です。 最後に、いくつかの状態はレンダリングに直接必要ではないか、異なるバージョン(たとえば、単一の状態を保存するサードパーティの物理エンジン)を追跡するのが難しすぎるようです-そのため、どのように知りたい人々はそのようなシステム内でそのようなデータを処理しました。

4
マルチスレッドエンジンのスレッド間でメッセージの受け渡しを煩雑にしないようにするにはどうすればよいですか?
現在取り組んでいるC ++エンジンは、いくつかの大きなスレッドに分割されています。生成(手順コンテンツの作成用)、ゲームプレイ(AI、スクリプト、シミュレーション用)、物理学、レンダリングです。 スレッドは、スレッドからスレッドに渡される小さなメッセージオブジェクトを介して相互に通信します。ステップ実行前に、スレッドはすべての受信メッセージを処理します-変換の更新、オブジェクトの追加と削除など。時々、あるスレッド(世代)が何か(アート)を作成し、それを別のスレッド(レンダリング)に渡して永久所有権を取得します。 プロセスの初期段階で、いくつかのことに気付きました。 メッセージングシステムは面倒です。新しいメッセージタイプの作成とは、ベースMessageクラスのサブクラス化、そのタイプの新しい列挙の作成、およびスレッドが新しいタイプのメッセージを解釈する方法のロジックを記述することを意味します。それは開発のためのスピードバンプであり、タイプミスのエラーを起こしやすいです。(Sidenote-これに取り組んでいると、動的言語がどれほど優れているかを理解できます!) これを行うためのより良い方法はありますか?boost :: bindのようなものを使用してこれを自動化する必要がありますか?そうすると、発言したり、タイプなどに基づいてメッセージを並べ替えたりすることができなくなります。そのような管理が必要になるかどうかはわかりません。 これらのスレッドは非常に多くの通信を行うため、最初のポイントは重要です。メッセージを作成して渡すことは、物事を実現するための大きな部分です。私はそのシステムを合理化したいが、同じように役立つかもしれない他のパラダイムにも開かれたい。これを簡単にするために考えるべき異なるマルチスレッド設計はありますか? たとえば、まれにしか書き込まれないが、複数のスレッドから頻繁に読み取られるリソースがあります。すべてのスレッドがアクセスできる、ミューテックスによって保護された共有データを持つというアイデアに開かれるべきですか? ゼロからマルチスレッドを念頭に置いて何かを設計するのは初めてです。この初期段階では、私は実際にそれが本当にうまくいくと考えています(考慮)が、スケーリングと、新しいものを実装する際の私自身の効率が心配です。

5
ゲームロジックスレッドとレンダリングスレッド間の同期
ゲームロジックとレンダリングをどのように分離しますか?ここで正確にそれを尋ねる質問が既にあるように思えますが、答えは私にとって満足のいくものではありません。 私がこれまでに理解していることから、それらを異なるスレッドに分ける点は、ブロックされているスワップバッファ呼び出しからレンダリングが最終的に返される次のvsyncを待つのではなく、ゲームロジックが次のティックですぐに実行を開始できるようにすることです。 しかし、具体的には、ゲームロジックスレッドとレンダリングスレッド間の競合状態を防ぐためにどのデータ構造が使用されているか。おそらく、レンダリングスレッドは、描画対象を特定するためにさまざまな変数にアクセスする必要がありますが、ゲームロジックがこれらの同じ変数を更新している可能性があります。 この問題を処理するための事実上の標準技術はありますか。ゲームロジックを実行するたびにレンダリングスレッドが必要とするデータをコピーするようなものです。解決策が何であれ、同期のオーバーヘッドや、すべてを単一スレッドで実行するよりも少ないものは何ですか?

2
シーン間のスムーズなロード画面
次のシーンの読み込み中に読み込みアニメーションを表示する読み込み画面を作成しました。次のシーンを非同期で読み込みます: yield return SceneManager.LoadSceneAsync(scene,LoadSceneMode.Additive); また、を設定Application.backgroundLoadingPriority = ThreadPriority.Low;しますが、動作は通常のレベルのロードと同じです。 何か不足していますか? 予想される動作: 出口レベル、およびフェードアウト。 ロード画面が表示されます。 ロードが完了したら、ロード画面をフェードアウトします。 次のシーンにフェードインします。 何が起こっている: 出口レベル、およびフェードアウト。 読み込み画面が表示され、フリーズします 突然新しいシーンがフェードインします。 ロードが開始されると、ゲームは通常のシーンロードのようにフリーズします。 を設定する必要があることを読みましたallowSceneActivation = falseので、読み込み画面をフェードアウトしてから、true読み込みが完了するように設定できますが、非同期操作が読み込みを完了しないように、これによりゲームが完全にフリーズします。

4
RTSゲームAIスレッド
リアルタイム戦略ゲームをゼロから作成するプロジェクトがあります。私はまだ計画の初期段階にありますが、機構を見るために少しプログラミングをしています。 プログラミングの方法を知っています。また、コンピュータープレーヤーのゲームクラスとルールベース(ステートマシン)AIをどのように構成するかについても良い考えがあります。 特定のユニットに特定の動作を与える(しかし、スカウト、ミッションルートに従う、ポジションを保持する(接近する敵を攻撃する、または圧倒された場合は退却する)など)Doctrineを開発したいなど 教義はユニットにのみ適用されるため、ユニットの観点があり、マップ全体の状況については認識されません。 コンピューターAIは、表示されているマップ全体を分析し、別のルールセットに応じて各ユニットを割り当てるソクトリンを決定します。 OpenGLを使用してC#でこれを行っています。 今のところ、私は主な構想を始める前に、テストには多くのことはなく、ほんの少ししかありません。すべてのゲーム処理(更新、戦闘、戦闘などを次々に呼び出す)が発生するゲームループがあり、Application.Idleイベントの場合は非常に頻繁に呼び出されます。 今、私は疑問に思っていました。ゲームループでは多くの処理が必要になるため、コンピューターAIとユニットはそのループでアクションを選択する必要がありますか、それとも遅すぎますか? すべてを同時に実行したい場合、コンピューターAI用に別のスレッドを作成する必要がありますか?それとも、ユニットごとに個別のスレッドですか? マルチスレッドの経験はあまりありません。これに最適なアプローチは何でしょうか?
14 c#  ai  multithreading 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.