問題タブ [real-time]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
30 に答える
26240 参照

c++ - リアルタイム グラフィックス プログラミング用の C++ に代わる最良の方法は何ですか?

C++ は、私が自分のメモリを細かく管理したり、タイプしすぎたり (hello std::vector<Thingy>::const_iterator it = lotsOfThingys.begin()) したり、長いコンパイル時間で私を退屈させたりすることで、私の時間を浪費しすぎています。本格的なリアルタイム グラフィックス プログラミングの唯一の最良の代替手段は何ですか? ガベージ コレクションは必須であり (必要に応じてその使用を回避する機能も同様)、速度は C++ に匹敵するものでなければなりません。C ライブラリにアクセスするための合理的な話も必須です。

(完全な開示: 私はこれに対する独自の回答を持っていますが、リアルタイム グラフィックス作業のための C++ の優れた代替手段であると他の人が見つけたものを知りたいと思っています。)

編集:思慮深い返信をありがとう。この質問に対する「正しい」答えは実際には存在しないため、特定の答えを選択するつもりはありません。それに、たまたま気に入った言語を C++ の代替として選択するだけですが、これは公平ではありません。

0 投票する
10 に答える
3543 参照

linux - SD/USB へのバースト書き込みにより、組み込み Linux でタイム クリティカルなアプリが失速する

私は、ARM9 をハードウェア ビデオ エンコーダ チップに接続し、ビデオを SD カードまたは USB スティックに書き込む組み込み Linux プロジェクトに取り組んでいます。ソフトウェア アーキテクチャには、データをバッファーのプールに読み込むカーネル ドライバーと、マウントされたリムーバブル デバイス上のファイルにデータを書き込むユーザーランド アプリが含まれます。

特定のデータ レート (約 750kbyte/秒) を超えると、約 5 秒ごとに、ユーザーランドのビデオ書き込みアプリがおそらく 0.5 秒停止するのが見え始めます。これは、カーネル ドライバーがバッファーを使い果たすのに十分です。また、バッファーの数を増やすことができたとしても、ビデオ データは、リアルタイムで行われている他の処理と同期する必要があります (理想的には 40 ミリ秒以内)。これらの 5 秒の「ラグ スパイク」の間で、書き込みは 40 ミリ秒以内に完了します (アプリに関する限り、OS によってバッファリングされていることに感謝します)。

このラグスパイクは、Linuxがデータをディスクにフラッシュする方法に関係していると思います.pdflushは5秒ごとに起動するように設計されていることに注意してください. ストールが終わるとすぐに、ユーザーランド アプリは迅速にサービスを提供し、(オーバーフローしなかった) バッファーのバックログを書き込むことができます。

私が書き込んでいるデバイスは、合理的な究極のスループットを持っていると思います.15MBのファイルをメモリfsからコピーし、同期が完了するのを待つ(そしてUSBスティックのライトが点滅を止める)と、約2.7MBytes /秒の書き込み速度が得られました。

私は2種類の手がかりを探しています:

  1. バースト書き込みによってアプリが停止するのを防ぐにはどうすればよいでしょうか? おそらくプロセスの優先順位、リアルタイムのパッチ、またはバーストではなく継続的に書き込むようにファイルシステム コードを調整することでしょうか?

  2. カード/スティックへの書き込みバックログとスループットに関して、ファイルシステムで何が起こっているかをアプリに認識させるにはどうすればよいですか? ハードウェアコーデックのビデオビットレートをオンザフライで変更できます。これは、フレームをドロップしたり、最大許容ビットレートに人為的な上限を課したりするよりもはるかに優れています。

詳細情報: これは現在 Montavista 2.6.10 ベースのカーネルを実行している 200MHz ARM9 です。

アップデート:

  • ファイルシステム SYNC をマウントすると、スループットが大幅に低下します。
  • リムーバブル メディアは FAT/FAT32 でフォーマットされており、メディアを任意の Windows PC に接続して読み取ることができるように設計されている必要があります。
  • たとえば、定期的に sync() または fsync() を呼び出すと、毎秒定期的なストールが発生し、スループットが許容できないほど低下します
  • fopen() などではなく、write() と open(O_WRONLY | O_CREAT | O_TRUNC) を使用しています。
  • 上記の「Linuxリアルタイムファイルシステム」についてオンラインですぐに見つけることができません。リンク?

これが理にかなっていることを願っています。stackoverflow に関する最初の組み込み Linux の質問は? :)

0 投票する
13 に答える
2078 参照

real-time - 「リアルタイム」を構成するもの

アプリケーションを「リアルタイム」または「ほぼリアルタイム」、あるいはそれ以外のものとして分類するかどうかを判断するのに問題があります。

ソフトウェアは、ソースから生成されたデータをすぐに受信し、特定のルールに基づいて、特定の条件が満たされたときにアラートを生成します。ルールの基準が満たされているかどうかを確認するために、30秒ごとに最後の30秒のデータをチェックするというアプローチが採用されています。

それはリアルタイムですか?リアルタイムとほぼリアルタイムの定義のしきい値は何ですか?

編集

これは、ビジネス向けのWebでのリアルタイムの定義の複製だと思います。

上記のスレッドがあなたの質問に答えるのに不十分であるかどうかを判断してください。

0 投票する
13 に答える
26682 参照

c# - リアルタイム .NET アプリケーションでガベージ コレクションを回避するにはどうすればよいですか?

ネットワークからメッセージを受信し、メッセージの種類に応じて異なるオブジェクトに変換し、最後にアプリケーション ビジネス ロジックを適用する金融 C# アプリケーションを作成しています。

ポイントは、ビジネス ロジックが適用された後は、このインスタンスが再び必要になることはないと確信しているということです。ガベージコレクターがそれらを解放するのを待つのではなく、明示的に「削除」したいと思います。

オブジェクトのプールを使用して常に同じインスタンスのセットを再利用する必要がありますか、それともより良い戦略がありますか?

目標は、タイム クリティカルなプロセス中にガベージ コレクションが CPU を使用するのを回避することです。

0 投票する
7 に答える
392 参照

c - フラッシュ メモリのセグメントにデータを追加すると、プログラムのタイミングがどのように狂うのでしょうか?

主要なサイクルが 10KHz で実行されるリアルタイム組み込みアプリがあります。フラッシュから起動するように構成された TI TMS320C 上で動作します。最近、初期化された配列をソース ファイルに追加したところ、突然タイミングが狂いました (複雑すぎてうまく説明できません - 基本的に、シリアル ポートの書き込みが時間どおりに完了しなくなりました)。

これについて私を困惑させること:

  • 初期化された配列を宣言するだけで、新しいデータにアクセスすることすらありません
  • サイズに依存します - 問題は、配列が 40 ワードを超える場合にのみ発生します。
  • リンク マップ内のデータ セグメントがオーバーフローしていないことはわかっています。
  • データ キャッシュがないため、キャッシュの一貫性が損なわれることはありません。

フラッシュ内の .cinit セグメントのサイズを単純に大きくすると、コードのタイミングにどのように影響するかについてのアイデアはありますか?

追加情報:
コードが移動したのではないかと考えましたが、データから十分に分離されています。すべてのコード セグメントがバグの前後で同じアドレスを持っていることをメモリ マップで確認しました。また、満杯のセグメントがないことも確認しました。マップ内で変化するアドレスは、.cinit セクションの一部のみです。そのセクションには、RAM の変数を初期化するために使用されるデータ値が含まれています (私の配列など)。main() が呼び出された後はアクセスしないでください。

0 投票する
4 に答える
346 参照

performance - リアルタイム システムのパフォーマンスの向上

まず、金融業界のリアルタイム システムで許容されるエンド ツー エンドのレイテンシが 200 ミリ秒未満であることを確認したいと思います。さて、これが私が求めているものです。リアルタイム システムの設計では、パフォーマンスを向上させる (処理時間の短縮、スケーラビリティの向上など) "設計パターン" (または手法) があります。

私が求めていることの例は、主キーの割り当てに連番の代わりに GUID を使用することです。GUID の根拠は、ハンドラーが互いに「相談」することなく、独自の主キー ジェネレーターを持っていることです。これにより、並列処理が可能になり、スケーリングが可能になります。

ここにいくつかあります。できたらリストに追加しようと思います。

私はコミュニティの集合的な知恵に頭を下げます。ありがとうございます!

0 投票する
4 に答える
284 参照

real-time - 大量のデータのサードパーティ データ配信

大量のデータをリアルタイムでフィードするサイトがどのように機能するか知っている人はいますか? 私は在庫サイトのようなものを指しています。彼らはリアルタイムであなたに伝えることができます(まあ、ほとんど20分の遅れですが、それでもリアルタイムです-私が理解しているように20分です)。

毎秒何千ものデータが配信されていると想像できます: MSFT 25.00 +.23 VOL 12000 ???? ある間隔で変化があった各株について。

それで、小さなプッシュの絶え間ないフィードが起こっているだけですか?それとも、サイトが実際のデータを持っている場所からプルして、「12:23:45 CST から現在までのすべての変更を教えてください」タイプのクエリを言うと思いますか?

職場では、このようなアプリケーションのリアルタイム情報をすぐに入手する必要がある状況が発生する可能性があり、サードパーティのプロバイダーに毎秒何度も何度もアクセスするのは意味がありません...

0 投票する
8 に答える
18539 参照

linux - Linuxでのマイクロ秒精度(またはそれ以上)のプロセスタイミング

プログラムの一部の時間を計る非常に正確な方法が必要です。これには通常の高解像度クロックを使用できますが、ウォールクロック時間が返されます。これは必要な時間ではありません。プロセスの実行に費やす時間が必要です。

ブックマークを忘れてパッチの名前も忘れてしまったことを除けば、プロセスのタイミングをナノ秒の精度にできるLinuxカーネルパッチを見たことをはっきりと覚えています:(。

私はそれがどのように機能するかを覚えています:

すべてのコンテキストスイッチで、高解像度クロックの値を読み取り、最後の2つの値のデルタを実行中のプロセスのプロセス時間に追加します。これにより、プロセスの実際のプロセス時間の高解像度で正確なビューが生成されます。

通常の処理時間は通常の時計を使用して維持されます。これはミリ秒の精度(1000Hz)であり、私の目的には大きすぎます。

私が話しているカーネルパッチを誰かが知っていますか?また、前後に文字が入った単語のようだったのを覚えています。「rtimer」などのようなものですが、正確には覚えていません。

(他の提案も大歓迎です)


Markoによって提案されたCompletelyFairSchedulerは、私が探していたものではありませんが、有望に見えます。私が抱えている問題は、処理時間を取得するために使用できる呼び出しが、まだ十分にきめ細かい値を返さないことです。

  • times()はミリ秒単位で値21、22を返します。
  • clock()は、同じ粒度の値21000、22000を返します。
  • getrusage()は210002、22001(およびそのようなもの)のような値を返します。それらは少し精度が高いように見えますが、値は著しく同じに見えます。

だから今私がおそらく抱えている問題は、カーネルが私が必要とする情報を持っているということです、私はそれを返すシステムコールを知らないだけです。

0 投票する
7 に答える
11199 参照

linux - SDカード書き込み性能

SDカードに一定の速度でjpeg画像を書き込む小さなアプリケーションを書いています。EXT3 ファイルシステムを選択しましたが、EXT2 ファイルシステムでも同じ動作が観察されました。

私の書き込みループは次のようになります。

またはこのように:

また、いくつかのタイミング統計を表示すると、プログラムが数秒間ブロックされていることがわかります。受信画像を fifo に保持すると、そのようなストールの後に短時間で多くの画像を書き込むため、平均レートはまだ良好です。OSの問題なのかSDカード自体の問題なのか分かりますか?どうすればリアルタイムに近づくことができますか? 強力なリアルタイムは必要ありませんが、数秒間停止することは受け入れられません。

ある程度の精度:はい、すべてのファイルの後にfsyncする必要があります。これは、イメージをユーザーまたはカーネルバッファーではなくディスクに配置したいためです。fsync を使用しないと、スルー出力が大幅に改善されますが、それでも許容できないほどのストールが発生します。最初のストールは 50M バイトが書き込まれた後に発生するため、バッファの問題ではないと思います。また、man ページによると、fsync は正確にここにあり、データがバッファリングされていないことを確認します。

平均書き込み速度に関する精度 : 使用しているカードで維持できる速度で書き込みを行っています。fsync が完了するのを待っている間に着信イメージをパイルすると、この失速後に書き込み転送速度が上昇し、すぐに平均速度に戻ります。平均転送速度は約 1.4 MBytes/s です。

システムは、ストックキー(2.6.24.19)を備えたubuntu 8.04を実行する最新のラップトップです

0 投票する
7 に答える
527 参照

ajax - クロスプラットフォームのリッチユーザーインターフェイス開発に利用できるオプションは何ですか?

このようなUIフレームワーク/ツールキットの要件(制限)のいくつかは次のとおりです。

  • 単一のベンダーロックインはありません
  • リアルタイムのデータ視覚化機能
  • 良い初期ウィジェット
  • 優れたダッシュボーディング機能
  • クロスプラットフォーム
  • 優れた開発/デバッグ環境
  • フラッシュなし