問題タブ [fst]
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.
java - ソケットのシリアル化の速度低下
私はソケットのシリアライゼーションに慣れていないことを序文にしたいと思います。反対票を投じる前に、編集に追加できるものを提案してください。プロジェクトがかなり大きいため、コードをできるだけ小さく分割しようとしました。
クライアントがサーバー上のメソッドを呼び出し、メソッドがそのようなオブジェクトを作成した場合にオブジェクトを取得できる、非常に単純な RPC タイプのミドルウェアを作成しようとしています。FST-Serializerライブラリを使用してオブジェクトをシリアル化し、ネットワーク/ソケット経由で送信しています。
起動して実行している間に、これが発生するとシリアライゼーションのパフォーマンスが大幅に低下するという非常に奇妙な問題を発見しました (以下のコード例)。
これは、ネットワークが遅いか、実装が十分に速く呼び出せないことを意味しますが、これが発生すると、大幅に高速化されます。
これは最初は大したことではないように思えますが、void メソッドの場合、ダミー データを送り返す必要があるため、理由もなくネットワーク旅行をしなければならないため、煩わしくなります。
これはバッファが十分に大きくない可能性があると思いましたが、さまざまなバッファサイズを試してみましたが、何も解決しないようです. だから私の質問は、スローダウンなどの原因は何ですか?それは予防可能/修正可能ですか?
ホットスポット分析を確認するためにYouKitのパフォーマンスを実行しました(これも初めてです)。BufferedReader.Readメソッドが大幅に遅くなったようです。
着信呼び出しをリッスンする ServerThread のスニペット (クライアント コードも同様で、同じバッファサイズで同じ入力/出力を作成します):
サーバースレッドに送信されたクライアントからシリアル化されたメソッド クラス
FST の TCPObjectSocket に基づく TCPSerializer (serverthread&client によって継承:
クライアントがメソッドを呼び出す方法の例:
list - F# ペアのリストを取得してペアを返す
ペアのリストを取り、x 値に y 値を乗算したペアを返そうとします: 例: mult [(x,y);(x,y);(x,y)] は (x x x,y y y) mult [(1,2);((1,2);(1,2)] は (1,8) を返します
map fst でこれを実行しようとしており、再帰はありません。現在、私のコードは次のとおりです。
f# はかなり新しい