タグ付けされた質問 「real-time」

4
飛行機ではどのオペレーティングシステムが使用され、どのプログラミング言語で開発されていますか?[閉まっている]
民間航空機(ボーイングやエアバスなど)で使用されているオペレーティングシステムが何かを知っている人がいるのだろうかと思っていました。 また、(推奨)リアルタイムプログラミング言語とは何ですか?私はエイダがボーイングで使用されていると聞いたので、私の質問は-なぜエイダですか?ボーイングがこの言語を選択しなければならなかった基準は何ですか?(ちょうどリフトオフでガベージコレクターが起動する場合、Javaは最適な選択肢ではないと思います)。


3
ガベージコレクターを除き、Javaを非リアルタイムプログラミング言語にするもの
ガベージコレクタを除き、リアルタイムプログラミングに適さないJavaのその他の機能は何ですか?ネット上では、Java vs C ++がリアルタイムプログラミングに関して議論されるときはいつでも、言及されるのは常にガベージコレクターです。他に何かありますか?

3
Java / Linuxスタックが「リアルタイム」に失敗する理由は何ですか?
開発者は、Javaが「リアルタイムを実行できない」、つまりLinuxで実行されているJavaアプリがRIOT-OSで実行されているものなどの確定的なリアルタイムシステムの要件を満たせないことを言及することをよく耳にします。 理由を理解しようとしています。私のSWAGによると、これはおそらくJavaのガベージコレクターによるものと思われます。Javaガベージコレクターはいつでも実行でき、システムを完全に一時停止できます。また、いわゆる「一時停止GC」はありますが、必ずしも広告を信じているわけではありません。また、趣味のプロジェクトに分岐するためのJVMインスタンスあたり$ 80Kもありません。 Linuxでのドローンソフトウェアの実行に関するこの記事も読んでいました。その記事で、著者はLinuxがドローンを車に衝突させそうになったシナリオについて説明しています。 Piで低レベル制御ループ(PID)を実行することを選択した後、ハードレッスンを学びました-巧妙にしようとして、デバッグのためにループの中央にログ書き込みを配置することを決めました-クワッドは最初はうまく飛んでいましたが、Linuxは決定しました1つのログエントリを書き込むのに2秒かかり、クワッドは私の車にほとんどクラッシュしました! その著者はドローンソフトウェアをC ++で作成しましたが、Linux上で実行されているJavaアプリが同じ運命をたどる可能性が非常に高いと思います。 ウィキペディアによると: 操作の全体的な正確さが、その論理的な正確さだけでなく、実行される時間にも依存する場合、システムはリアルタイムであると言われます。 だから、私には、この手段は、「総正しさを論理的正当性と適時性を必要とする場合は、リアルタイムではありません。」 Javaアプリを書いて超高性能になり、いわば「レモンを絞る」ようになりましたが、それを(Javaで)速く書くことはできませんでした。 全体として、私の質問は次のとおりです。Linuxを実行しているJavaアプリが「リアルタイムアプリ」にならない理由のすべて/ほとんどの理由を説明してくれる人を探しています。つまり、Java / Linuxスタック上の「タイムリー」であることを妨げ、したがって「完全に正しい」ことを妨げるすべてのカテゴリは何ですか?前述のように、GCとLinuxのログフラッシュは実行を一時停止する可能性がありますが、Javaアプリ自体の外部には、タイミングやパフォーマンスが低下し、ハードデッドラインの制約を満たすものがもっとあるはずです。彼らは何ですか?
20 java  linux  real-time 

3
クライアント/サーバーリアルタイムビデオゲームで高速なコンピューターを扱う方法
socket.ioを使用して最初のオンラインゲームを作成していますが、agar.ioやdiep.ioのようなリアルタイムのマルチプレイヤーゲームになりたいです。 しかし、すべてのコンピューターを同じ速度で動作させる方法を見つけようとする問題に遭遇しました。 モデルには3つのアイデアがありますが、どれも正しいとは思えません。通常のビデオゲームではどのようにそれが行われるのでしょうか。(私のアイデアを読むことをスキップできます;私が抱えている問題を見る方法を与えてくれます。) サーバーは、クライアントが自分で実行できるようにし、サーバーに更新を渡し、サーバーから残りのクライアントに更新をブロードキャストします。これには、一部のコンピューターが他のコンピューターよりも速く動作し、更新が速くなり、画面上をより速く移動できるという問題があります。 更新するタイミングをサーバーにクライアントに伝えます。次に、最後のクライアントが応答するまで待機し(ある人が遅いコンピューターを使用している場合のひどい考え)、最初のクライアントが応答するまで待機し(再び、各フレームの前に通信を待機します)、またはできるだけ早く送信します(これは、 1)と同じ問題に遭遇するようです。 ゲームの開始時に、サーバーにクライアントに更新の速さを伝えてもらいます。これは、クライアントがその期間の間の移動を制限する責任があることを意味します。たとえば、その期間内に誰かがなんとかボタンを2回押すことができた場合、ボタンを押すイベントは1つしか送信されません。これには、一部のアクション(ダブルボタンを押すなど)が無視され、サーバーのクロックと一致しない可能性のあるクライアントのクロックに相互作用が依存するという問題があります。サーバーは、各クライアントを追跡し、更新が正しい時間に送信されていることを確認する必要があります。 私はいくつかの調査を行いましたが、私が読んだ記事は、クライアントが他のクライアントよりも速く更新を送信した場合の対処方法を具体的に扱っていないようです。 私の特定のケースでは、キーボードの速度が速い人を扱っています(彼らのコンピューターは他のコンピューターよりも多くのキーボード更新を送信します)。 プログラマは通常、これにどのように対処しますか?

2
データベースの変更(挿入、更新、削除)が発生したときに、リアルタイムの通知を取得する方法は?
データベーステーブルを監視するダッシュボードを作成しています。データベースアクセスのみがあります(アプリケーション層はありません)。テーブルはかなり大きい(1000万行)が、急速には変化しない(1分間に100回の挿入/更新) テーブルが変更されたかどうかを確認するにはどうすればよいですか?私は毎秒データベースにアクセスしようとしますが、これは総当たり的なアプローチのようです... データベース:MySQL / Postgres

2
MCUプログラミングにおけるRTOSとベアメタルの利点は?
注:この質問では、2つのRTOSについて具体的に言及していますが、より一般的であり、以前に組み込みRTOSのCコードを記述し、MCUでソフトウェアを直接実行したことがある人なら誰でも回答できます。 組み込みRTOSの詳細を学び、そのためのアプリケーションを作成することに興味があります。現在、EmboxとRIOTを検討しています。それらはオープンソースで、モダンで、アクティブで、優れたドキュメントがあるようです。私の目標は2つのフェーズです。フェーズ1は、これらのOSをコンパイルしてMCU(おそらくAVRまたはARM)にフラッシュする方法を見つけ出すことです。フェーズ2では、単純なCプログラム(基本的にはヘッドレスデーモン)を作成します。これは、「趣味アプリ」として時間とともに進化します。次に、このプログラムを同じMCUにフラッシュ/展開することで、Embox / RIOTとその上にあるアプリで構成されるアプリスタックを正常に展開します。 最終的に行き止まりに至る道を進む前に、C /アセンブラーで書かれMCUにフラッシュされたリアルタイムアプリがRTOSを実際に必要としない理由を説明するのに非常に役立つこの記事を偶然見つけました。 。 だから今、私は本当に混乱していて、コンピューティング理論の私の基本的な理解に疑問を抱いています。私は、最初にEmbox / RIOTを使用するかどうかの決定をしようとしていると思います。 コースを継続し、両方のOS +アプリのMCUで「アプリスタック」を使用します。または 記事の警告に注意し、MCUでアプリ「ベアメタル」を実行してください 明らかに、前者はより多くの作業であるため、そのルートに進むのに十分な理由/報酬が必要です。だから私は尋ねる:これらの(および同様の)組み込みRTOSがMCU / Cアプリ開発者に提供する本当の利点は何ですか?RTOSを使用することで、Cアプリはどのような特定の機能の恩恵を受けることができますか(おそらく、車輪を再発明しないことによって?)RTOSを捨ててベアメタルに移行すると何が失われますか? ここでは具体的な例を求めています。RTOSのウィキペディアエントリにアクセスしたときに得られるメディアの誇大広告ではありません;-)

6
リアルタイムのコラボレーション中に保存する方法
複数のユーザーに同じドキュメントを編集してもらいたい。私が直面している問題は、新しいユーザーが参加したときに、古いドキュメントが表示される可能性があることです。新しいユーザーが最新の変更を確実に取得する方法を教えてください。 私が考えたいくつかの解決策: すべての変更を保存します。UIの動作が遅くなり、dbに負荷がかかるため、このソリューションは好きではありません。 新しいユーザーが参加すると、他のすべてのクライアントで保存をトリガーします。他のクライアントが保存した後、ドキュメントをロードします。これにより、依然として矛盾が生じる可能性があります。 他の提案は参考になります。 更新:提案されたソリューションであるGoogle Realtime APIを調べたところ、次のことがわかりました。 アプリのユーザーはGoogleドライブを持っている必要があり、ドライブへのアクセスを許可する必要があります。これは、せいぜいぎこちないUIフローを提示したり、Googleドライブを持たないユーザーがリアルタイム機能を使用できないようにすることができます。 あなたの側で行われるすべての共有設定は、Googleドキュメント用に複製する必要があります。 更新2:目標を達成するために、GoogleのFirebaseを使用しました

3
ソフトウェアを修正してリアルタイムにする方法は?[閉まっている]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 3年前休業。 最初に、私はリアルタイムシステムプログラミングの初心者であることを述べたいので、私の質問が正しいかどうかはわかりません。申し訳ありませんが、私はいくつかの助けが必要です 簡単に言え ば、ハードリアルタイムソフトウェアを実装して、ハードデッドラインに確実に対応する方法を教えてください。QNXのいくつかの機能を使用する必要がありますか?それともLinuxでQNXに移植するだけで十分であり、デフォルトでリアルタイムになりますか? 完全な質問: Linux、Windows、Android、QNXのプロセス間通信を備えた複雑なクロスプラットフォームマルチプロセスソフトウェアを実装しました。プログラミング言語はC ++です。他のライブラリのBoostとPlantyを使用しています。私たちのソフトウェアはそれをうまく素早く実行しますが、それでもプロトタイプです。本番環境ではリアルタイムで実行する必要があります。一部の機能はリアルタイムで非常に堅牢である必要があります。これらの機能は非常に重要であり、ソフトウェアを使用するユーザーの安全性に依存している可能性があるためです。それらはかなり速く動作します-数百ミリ秒まで。しかし、この事実のため、私たちのシステムが本当にリアルタイムであるかどうかはわかりません(私は正しいですか?)。 ですから、主な質問があります。ソフトウェアをリアルタイムに変更する方法は?私はたくさんググってみましたが、どうすればいいのかまだわかりません。 プラットフォームに関するいくつかの追加情報:現在テスト目的でのみ使用しているLinuxおよびWindows。Android-必要かどうかはまだ決まっていません。QNX-本番環境のターゲットOSです。次の質問の答えは「いいえ」だと思います:)しかし、クロスプラットフォームのリアルタイムソフトウェア(リアルタイムOS(RTOS)および汎用OS(GPOS)の場合)を実装することはまったく可能ですか? おそらく、QNXにのみすべてのリアルタイム機能を実装するよう努力する必要があるでしょうか。しかし、私はまだそれを行う方法を理解していません。誰かがこの質問に光を当てることができますか?
9 c++  real-time 

6
リアルタイムの単体テスト-または「今すぐモックする方法」
時間に依存する機能に取り組んでいるとき...単体テストはどのように整理しますか?単体テストのシナリオがプログラムの「今」を解釈する方法に依存する場合、どのように設定しますか? 2番目の編集:数日後にあなたの経験を読んでください この状況に対処するための手法は、通常、次の3つの原則の1つを中心に展開することがわかります。 依存関係を追加(ハードコード)する:時間関数/オブジェクトの上に小さなレイヤーを追加し、常にこのレイヤーを通じてdatetime関数を呼び出します。このようにして、テストケース中に時間を制御できます。 モックを使用する:コードはまったく同じままです。テストでは、時間オブジェクトを偽の時間オブジェクトに置き換えます。ソリューションには、プログラミング言語によって提供される本物の時刻オブジェクトを変更することが含まれる場合があります。 依存性注入を使用する:時間参照がパラメーターとして渡されるようにコードをビルドします。次に、テスト中にパラメーターを制御します。 言語に固有の手法(またはライブラリ)は大歓迎であり、例示的なコードが追加されれば強化されます。次に、どのプラットフォームに同様の原則を適用できるかが最も興味深い。そしてはい... PHPですぐにそれを適用できる場合は、より良いよりも優れています;) 簡単な例から始めましょう:基本的な予約アプリケーションです。 JSON APIと、リクエストメッセージと確認メッセージの2つのメッセージがあるとします。標準的なシナリオは次のようになります。 あなたはリクエストをします。トークンを使用して応答を取得します。その要求を満たすために必要なリソースは、システムによって5分間ブロックされます。 トークンで識別されるリクエストを確認します。トークンが5分以内に発行された場合、トークンは受け入れられます(リソースは引き続き使用可能です)。5分以上経過した場合は、新しいリクエストを作成する必要があります(リソースは解放されています。リソースの可用性をもう一度確認する必要があります)。 ここに対応するテストシナリオがあります: お願いします。受け取ったトークンで(すぐに)確認します。私の確認は受け入れられました。 お願いします。3分待ちます。受け取ったトークンで確認します。私の確認は受け入れられました。 お願いします。6分待ちます。受け取ったトークンで確認します。確認が拒否されました。 これらの単体テストをプログラムするにはどうすればよいですか?これらの機能をテストできるようにするには、どのアーキテクチャを使用する必要がありますか? 編集注:リクエストを送信すると、時間はミリ秒に関する情報を失う形式でデータベースに保存されます。 余計ですが、少し冗長かもしれません。ここで、「宿題」をやっていることがわかった詳細について説明します。 私は自分の時間関数に依存して機能を構築しました。私の関数VirtualDateTimeには、新しいDateTime()を呼び出すために使用した静的メソッドget_time()があります。この時間機能を使用すると、「今」の時間をシミュレートおよび制御できるため、「今すぐ21st jan 2014 16h15に設定します。リクエストを送信します。3分先に進みます。確認を行います」のようなテストを作成できます。これは、依存関係を犠牲にしてうまく機能し、「それほどきれいではないコード」です。 もう少し統合されたソリューションは、追加の「仮想時間」機能を備えたDateTimeを拡張する独自のmyDateTime関数を構築することです(最も重要なことは、今、私が望むものに設定することです)。これにより、最初のソリューションのコードは少しエレガントになりますが(新しいDateTimeではなく新しいmyDateTimeを使用)、非常によく似たものになります。独自のクラスを使用して機能を構築する必要があるため、依存関係が作成されます。 でも、DateTime関数をハッキングして、必要なときに依存関係で機能させるようにしています。ただし、クラスを別のクラスで置き換える簡単で便利な方法はありますか?(私はそれに対する答えを得たと思います:下記の名前空間を参照してください)。 PHP環境では、「Runkit」を読んで、これを動的に行うことができます(DateTime関数をハックする)。DateTimeに関する変更を行う前に、テスト環境で実行していることを確認し、運用環境でそのままにしておくことができるのはすばらしいことです[1]。これは、手動のDateTimeハックよりはるかに安全でクリーンに聞こえます。 時間を使用する各クラスの時計関数の依存性注入[2]。これはやりすぎではありませんか?一部の環境では非常に役立つことがわかります[5]。この場合、私はあまり好きではありませんが。 すべての関数の時間の依存関係を削除します[2]。これは常に実現可能ですか?(以下のその他の例を参照) 名前空間の使用[2] [3]?これはかなりよさそうだ。\ DateTimeを拡張する独自のDateTime関数でDateTimeをモックすることができます... DateTime :: setNow( "2014-01-21 16:15:00")とDateTime :: wait( "+ 3 minutes")を使用します。これは私が必要とするもののほとんどをカバーしています。しかし、time()関数を使用するとどうなりますか?または他の時間関数?私はまだ元のコードでの使用を避けなければなりません。または、コードで使用しているPHP時間関数がテストでオーバーライドされていることを確認する必要があります...これだけを実行できるライブラリはありますか? スレッドのためだけにシステム時間を変更する方法を探していました。何もないようです [4]。これは残念です。「このスレッドの2014年1月21日16h15に時間を設定する」ための「単純な」PHP関数は、この種のテストに最適な機能です。 exec()を使用して、テストのシステム日時を変更します。これは、サーバー上の他のものを台無しにすることを恐れていない場合に機能します。また、テストを実行した後、システム時間を戻す必要があります。それはいくつかの状況でトリックを行うことができますが、かなり「ハッキー」に感じます。 これは私にとって非常に標準的な問題のように見えます。しかし、それを処理するための単純で一般的な方法がまだありません。多分私は何かを逃した?あなたの経験を共有してください! 注:同様のテストが必要になる可能性がある他の状況をいくつか示します。 なんらかのタイムアウトで機能する機能(チェスゲームなど) 特定の時間にイベントをトリガーするキューを処理します(上記のシナリオでは、次のように続けることができます。予約が始まる1日前に、すべての詳細をメールでユーザーに送信します。テストシナリオ...) 過去に収集されたデータを使用してテスト環境をセットアップしたい-今のように表示したい。[1] …

4
C#のソフトリアルタイムコードに対してどのような最適化を行うことができますか?
C#でソフトリアルタイムアプリケーションを作成しています。ネットワークからのハードウェア要求への応答などの特定のタスクは、特定のミリ秒以内に完了する必要があります。ただし、そうすることは100%ミッションクリティカルではありません(つまり、ほとんどの時間に時間どおりにあることを許容でき、1%は望ましくありませんが失敗ではありません)。したがって、「ソフト」な部分です。 C#はマネージ言語であり、マネージ言語はリアルタイムアプリケーションには特に適していません。ただし、C#で物事を成し遂げることができる速度、およびリフレクションやメモリ管理などの言語機能により、このアプリケーションを構築するタスクがはるかに簡単になります。 オーバーヘッドの量を減らして確定性を高めるために実行できる最適化または設計戦略はありますか?理想的には私は次の目標を持っているでしょう 「安全」になるまでガベージコレクションを遅らせる ガベージコレクターがリアルタイムプロセスに干渉することなく動作できるようにする さまざまなタスクのスレッド/プロセスの優先順位 C#でこれらを行う方法はありますか、C#を使用するときにリアルタイムに関して他に注意する点はありますか? アプリケーションのプラットフォームターゲットは、Windows 7 64ビットの.NET 4.0クライアントプロファイルです。現在はクライアントプロファイルに設定していますが、これはデフォルトのオプションであり、特別な理由で選択されませんでした。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.