問題タブ [low-latency]
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.
c++ - int unsignedのマーク付けに関するコンパイラの最適化?
-ve 値を取ることが期待されない整数の場合、unsigned int または int を使用できます。コンパイラの観点または純粋に CPU サイクルの観点から、 x86_64 に違いはありますか?
android - Android: オーディオ ストリームを録音し、レイテンシー情報を取得する
- 入力ジャック (マイク?) からオーディオ ストリームを録音する簡単なテスト プログラムを書きたいと思います。
- オーディオ レイテンシ情報を計算して表示する必要があります。
NDK または SDK を使用する必要がありますか? 私のためにこれを行う簡単なソースコードはありますか?
最後に、どうすれば書き始めることができますか?
java - Java TCP/IPソケットのパフォーマンスの問題
私たちのアプリケーションは、JavaのTCP/IPソケットを介して非常に高速にデータを読み取っています。読み取りの準備ができていることを示すために、ノンブロッキングソケットとセレクターを備えたNIOライブラリを使用しています。平均して、読み取られたデータの読み取りと処理の全体的な処理時間は1ミリ秒未満です。ただし、10〜20ミリ秒のスパイクが頻繁に見られます。(Linuxで実行)。
tcpdumpを使用すると、tcpdumpが2つの個別のメッセージを読み取ったときの時間差を確認し、それをアプリケーションの時間と比較できます。tcpdumpには遅延がないように見えますが、アプリケーションは20ミリ秒を表示できます。
GCログには実質的にフルGCが表示されないため、これはGCではないと確信しています。JDK6では(私が理解しているように)デフォルトのGCは並列であるため、アプリケーションスレッドを一時停止しないでください(フルGCを実行しない限り)。 。
Selector.select(0)
TCP層では、データを既に読み取ることができる(そしてtcpdumpがデータを読み取っている)ため、Javaのメソッドが読み取りの準備を返すのに多少の遅延があるように見えます。
追加情報:ピーク負荷では、メッセージあたり平均約6,000 x 150バイト、つまり1秒あたり約900MBを処理しています。
iis - Live Smooth Streaming 会議ソリューションで待ち時間を短縮するにはどうすればよいですか?
Expression Encoder SDK を使用して Web カメラのライブ録画をエンコードし、IIS 7.5 および Media Services 4 をサポートする Web サーバーに公開し、SmoothStreamingClient で表示しています。
ただし、リアルタイムの会議ソリューションを目指しているため、ローカル プレビューとリモート再生の間の 20 秒の待ち時間を大幅に短縮する必要があります。
2 秒のレイテンシーを得るために Live Smooth Streaming を構成できることをいくつかの場所で読みましたが、そのようなソリューションを構成する方法を説明するチュートリアルは見つかりませんでした。消費する側。
これは、キャプチャしたビデオをエンコードするために使用しているコードです。
このコードに追加して、待ち時間を短縮できるものはありますか? そうでない場合、Smooth Streaming が提供するはずのいわゆる「低遅延サポート」をどこで設定できますか?
前もって感謝します!
.net - .NET Framework を使用したネットワーク遅延のシミュレーション
マイクロソフトは、.net での遅延をシミュレートする手段を提供していますか? 彼らはXNA用に持っていますが、.netフレームワーク用には見つかりません
linux - 異なるマシン間のタイムスタンプの比較
私が作業している環境には、チェーン内のデータを処理するLAN上の複数のマシン(Linux)が含まれます。ある方法でタイムスタンプを付けて、各ノードがいつ受信/送信したかを確認し、後でチェーン全体のタイムスタンプを比較できるようにしたいと思います。これは低遅延システムです。
異なるマシンで取得されたタイムスタンプを結果のマイクロ秒と比較することが可能かどうかを理解したいと思います。時計を同期するために通常どのような種類のサービスを使用し、どのような解像度を期待できますか?クロックドリフトなどはどうですか?
たとえば、Nノードとすべてのノードで秒/ミリ秒/マイクロ秒でクロックを同期させる必要がありますが、それは可能ですか、何が必要で、どのようなオーバーヘッドがありますか?
そしてもちろん、ネットワークと処理時間にできるだけ邪魔にならないようにしたいと思います。;-)
私は完全に不可能なことを見ていますか、それともこれを行うことができますか?
あなたの答えを読むのを楽しみにしています!ありがとう!
architecture - 受信したライブフィードデータを10,000ユーザーにプッシュしますか?
私が取り組んでいる新しいプロジェクトについて、低レイテンシーと高並行性を必要とするガイダンスを求めています。このプロジェクトでは、サードパーティのフィードからライブデータを受信し、基本的な処理と保存を行った後、これらの値をWebサイトで現在アクティブなすべてのユーザーに送信します。
データはHTTPプッシュ経由で到着します。現在の計画では、Node.jsを使用してこのデータを受信し、アルゴリズムを介してデータを実行してから、ある種のデータベースの関連データを更新します。最後に、更新はWebSocketを介してWebサイトの接続されているすべてのユーザーに送信されます。
今、私はこれをスケーラブルにして、10,000人を超える接続ユーザーを一度に処理しようとしています。すべてのユーザーはWebSocketを介して接続され、約3秒に1回更新を送信します。この間、各ユーザーがWebアプリを操作できることを考えると、多くのリクエストがやり取りされることになります。
さて、私が持っている高レベルの基本的な考え方は別として、WebサイトフレームワークとしてRuby on Railsを使用し、そのすべての「活気」を処理するノードjsを使用するという決定で-私は少し立ち往生しています。使用するデータベースの種類がわからず(クイックストレージ用の非リレーショナルデータベースになると思います)、そのようなセットアップを設計する方法の詳細と、ロジックを実装する方法もわかりません。 。
だから私の質問は次のとおりです。私の目標を考えると、そのようなアプリケーションをどのように構築し、希望するレベルまでスケーラブルでリアルタイムにするために何を知る必要がありますか?
助けてくれてありがとう。
java - Java TCP/IP Socket Latency - 50 マイクロ秒 (マイクロ秒) で止まっていますか? (Java IPC に使用)
アプリケーションのプロファイリングとプロファイリングを行って、レイテンシーを可能な限り削減しました。私たちのアプリケーションは 3 つの個別の Java プロセスで構成され、すべてが同じサーバー上で実行され、TCP/IP ソケットを介して互いにメッセージを渡しています。
最初のコンポーネントの処理時間を 25 μs に短縮しましたが、次のコンポーネントへの TCP/IP ソケットの書き込み (localhost 上) には常に約 50 μs かかることがわかります。もう 1 つの異常な動作が見られます。接続を受け入れているコンポーネントは、より高速に書き込むことができます (つまり、50 μs 未満)。現在、ソケット通信を除いて、すべてのコンポーネントが 100 μs 未満で動作しています。
TCP/IP の専門家ではないので、これを高速化するために何ができるかわかりません。Unix ドメイン ソケットの方が高速ですか? MemoryMappedFiles? ある Java プロセスから別の Java プロセスにデータを渡すためのより高速な方法として、他にどのようなメカニズムがあるでしょうか?
更新 2011 年 6 月 21 日 2 つのベンチマーク アプリケーションを作成しました。1 つは Java で、もう 1 つは C++ で、TCP/IP をより厳密にベンチマークし、比較します。Java アプリは NIO (ブロッキング モード) を使用し、C++ は Boost ASIO tcp ライブラリを使用しました。結果はほぼ同等で、C++ アプリは Java よりも約 4 マイクロ秒高速でした (ただし、テストの 1 つで Java は C++ を上回りました)。また、どちらのバージョンもメッセージあたりの時間に大きなばらつきがありました。
共有メモリの実装が最も高速になるという基本的な結論に同意していると思います。(ただし、予算に適合する場合は、インフォマティカ製品も評価したいと考えています。)
java - 低遅延ネットワーク技術と特効薬
低遅延ネットワークについて基本的なグーグル検索を行った結果、プログラマーとシステム設計者が低遅延ネットワークに着手する際に考慮すべき事項の次のリストを思いつきました。
ハードウェア、システム、およびプロトコルの設計は、一緒に検討する必要があります
TCP の代わりに UDP を使用してプロトコルを開発し、単純な ack-nak を実装し、アプリケーション レベルでロジックを再送信します。
ネットワークからデータを消費してパケット化するプロセスまたはスレッドのコンテキスト スイッチの数を (できればゼロに) 減らします。
OS に最適なセレクターを使用する (select、kqueue、epoll など)
大量のオンボード バッファ (fifo) を備えた高品質の NIC とスイッチを使用する
特にダウンストリームとアップストリームのデータ フローに複数の NIC を使用する
他のデバイスまたはソフトウェアによって生成される IRQ の数を減らします (つまり、不要な場合は削除します)。
ミューテックスと条件の使用を減らします。代わりに、可能であればロックフリー プログラミング手法を使用してください。アーキテクチャの CAS 機能を利用します。(ロックフリーコンテナ)
マルチスレッド設計よりもシングルスレッド設計を検討してください - コンテキストスイッチは非常に高価です。
アーキテクチャのキャッシュ システム (L1/L2、RAM など) を理解し、適切に利用する
ガベージ コレクターに委譲するよりも、メモリ管理を完全に制御することを優先する
高品質のケーブルを使用し、ケーブルをできるだけ短くし、ねじれやカールの数を減らします。
私の質問:ロー レイテンシー ネットワーキングに着手する際に、仲間の SO 関係者が重要だと信じていることは他にあるのだろうかと考えていました。
上記の点について自由に批判してください