問題タブ [io-buffering]
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 - ファイルへの書き込み中にJavaでテキストファイルのサイズをカウントする
この質問は、この質問で受け入れられた回答のフォローアップです。私は Aaron によって提案されたアプローチを実装しようとしています: FileOutputStream をラップして、これまでに書き込まれたバイト数のカウントを保持するロジックを含めます。ただし、このアプローチは期待どおりに機能していないようです。OutputStreamWriter は、 FileOutputStream.write() メソッドへの呼び出しを委譲する前にデータをバッファリングしているStreamEncoderを使用しているようです。
ここに小さなデモがあります:
そしてドライバークラス:
出力:-
書き込まれたバイト: 0
書き込まれたバイト: 0
...
書き込まれたバイト: 8192
書き込まれたバイト: 8192
...
出力に示されているように、StreamEncoder は、FileOutputStream の write() メソッドへの呼び出しを委譲する前に、最大 8192 バイトをバッファリングします。任意の時点でファイルに書き込まれたバイト数を取得するための回避策はありますか?
qt - Qtの「動的バッファ」にデータを保存する方法は?
QBufferを試しましたが、役に立たないようです。JavaのBuffer クラスのようなものが必要です
つまり、バッファにデータを挿入したいのですが、nサイズのデータを(最後から)読み取るときに、これを削除するか、シークポインタを正しい位置に移動する必要があります。
コンテキスト: シリアル ポート経由でファイルを (1 行ずつ) 送信する必要があります。メインプログラムは、接続を管理するファイルとスレッドを挿入し、可能な場合はバッファからデータを送信します。
linux-kernel - ファイル操作にユーザーバッファ I/O を使用する
私はシステム プログラミングの初心者です。疑問が非常に漠然としている場合は、気をつけてください。
組み込みのユーザー空間バッファーが使用されているため、カーネルを介したシステムコールを介してブロックサイズのデータにアクセスできますが、これには大きなオーバーヘッドがかかりますが、ユーザー空間では小さなサイズのデータに細かくアクセスできます.方法を理解しました.この方法は効率的ですが、これらのユーザーバッファーはファイルを開く各プロセスに関連しているため、理解できませんでした。
両方が同時にファイルにアクセスしている場合、プロセスはファイルに加えられたわずかな変更をどのように認識しますか。
プロセスは古いデータにアクセスしますが、ユーザー空間バッファーにまだある他のプロセスによって変更されたデータにはアクセスしないため、これは問題になりませんか。
間違いがあればご了承ください。
sql-server - SQL サーバー - バッファ IO とネットワーク IO が高い
SQL サーバーのパフォーマンス チューニングに関する質問があります。
毎月実行する必要があるプログラムがあり、完了するまでに 24 時間以上かかります。実行時間を 12 時間以下に短縮できることを期待して、このプログラムを調整する必要があります。
このプログラムは当社で開発したものではないため、プログラムの内容を確認して修正することはできません。私にできることは、SQL サーバー プロファイラーとアクティビティ モニターを開いて、SQL コンテンツをトレースおよび分析することだけです。未使用のトリガーを無効にしてハウスキーピングを行いましたが、実行時間は 1 時間しか短縮されませんでした。
ネットワーク I/O とバッファ I/O が高くなっていることがわかりましたが、原因と意味がわかりません。
これら 2 つの問題 (ネットワーク I/O とバター I/O) の原因を誰か教えてもらえますか? このプログラムを最適化するための提案はありますか?
ありがとうございました!
python - Windows の subprocess.stdout からのリアルタイム読み取り
強調するために、問題は非ブロック読み取りではなくリアルタイム読み取りです。subprocess.Popen.stdout - reading stdout in real-time (again)など、以前に尋ねられました。しかし、満足のいく解決策は提案されていません。
例として、次のコードは Python シェルをシミュレートしようとします。
ただし、から読み取るとブロックされp.stdout
ます。いろいろと調べてみると、以下の2つの解決策が見つかりました。
1 番目の解決策は機能し、Linux でのみ機能する可能性がありますが、2 番目の解決策はブロック読み取りを非ブロック読み取りに変えるだけです。つまり、サブプロセスのリアルタイム出力を取得できません。たとえば、「 」と入力すると、 2 番目のソリューションを使用してprint("hello")
も何も得られません。p.stdout
おそらく、誰かが提案するでしょうp.communite
。残念ながら、ここで説明されているように標準入力を閉じるため、この場合には適していません。
それで、Windowsの解決策はありますか?
編集済み:-u
をオンにしてp.stdout.read
に置き換えてもp.stdout.readline
、問題は依然として存在します。
解決策:以下は、JF Sebastian の回答とコメントに基づく最終的なコードです。
コマンドが出力をトリガーしない場合、プログラムがハングすることに注意してください。
bash - Cygwin 端末バッファ STDOUT
私は、独自の Cygwin ディストリビューションに付属する Altera Quartus ソフトウェアと、Altera が Start メニューに配置したショートカットに従って実行されるダム端末を使用しています。
このバッチ ファイルは、Quartus の環境を構成し、bash を起動します。このウィンドウを使用してアルテラ ツールを実行すると、その出力がすぐに (バッファリングされずに) カラーで表示されます。
また、Xserver と端末 (lxterminal、mrxvt、xfce4-terminal など) を備えた独自の Cygwin インストールもあります。Cygwin 内で Altera の環境を構成するために Altera のバッチ ファイルを適用したので、Altera のすべてのツールを実行できます。ただし、これらのツールを実行すると、出力はカラーではなく (大したことではありませんが驚くべきことです)、すべての出力が同時に表示される実行の最後までバッファリングされます。
このバッファリングをバイパスする方法について誰か考えがありますか?