問題タブ [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.

0 投票する
3 に答える
4755 参照

java - ファイルへの書き込み中にJavaでテキストファイルのサイズをカウントする

この質問は、この質問で受け入れられた回答のフォローアップです。私は Aaron によって提案されたアプローチを実装しようとしています: FileOutputStream をラップして、これまでに書き込まれたバイト数のカウントを保持するロジックを含めます。ただし、このアプローチは期待どおりに機能していないようです。OutputStreamWriter は、 FileOutputStream.write() メソッドへの呼び出しを委譲する前にデータをバッファリングしているStreamEncoderを使用しているようです。

ここに小さなデモがあります:

そしてドライバークラス:

出力:-

書き込まれたバイト: 0
書き込まれたバイト: 0
...
書き込まれたバイト: 8192
書き込まれたバイト: 8192
...

出力に示されているように、StreamEncoder は、FileOutputStream の write() メソッドへの呼び出しを委譲する前に、最大 8192 バイトをバッファリングします。任意の時点でファイルに書き込まれたバイト数を取得するための回避策はありますか?

0 投票する
1 に答える
1029 参照

qt - Qtの「動的バッファ」にデータを保存する方法は?

QBufferを試しましたが、役に立たないようです。JavaのBuffer クラスのようなものが必要です

つまり、バッファにデータを挿入したいのですが、nサイズのデータ​​を(最後から)読み取るときに、これを削除するか、シークポインタを正しい位置に移動する必要があります。

コンテキスト: シリアル ポート経由でファイルを (1 行ずつ) 送信する必要があります。メインプログラムは、接続を管理するファイルとスレッドを挿入し、可能な場合はバッファからデータを送信します。

0 投票する
1 に答える
252 参照

linux-kernel - ファイル操作にユーザーバッファ I/O を使用する

私はシステム プログラミングの初心者です。疑問が非常に漠然としている場合は、気をつけてください。

組み込みのユーザー空間バッファーが使用されているため、カーネルを介したシステムコールを介してブロックサイズのデータ​​にアクセスできますが、これには大きなオーバーヘッドがかかりますが、ユーザー空間では小さなサイズのデータ​​に細かくアクセスできます.方法を理解しました.この方法は効率的ですが、これらのユーザーバッファーはファイルを開く各プロセスに関連しているため、理解できませんでした。

両方が同時にファイルにアクセスしている場合、プロセスはファイルに加えられたわずかな変更をどのように認識しますか。

プロセスは古いデータにアクセスしますが、ユーザー空間バッファーにまだある他のプロセスによって変更されたデータにはアクセスしないため、これは問題になりませんか。

間違いがあればご了承ください。

0 投票する
2 に答える
4172 参照

sql-server - SQL サーバー - バッファ IO とネットワーク IO が高い

SQL サーバーのパフォーマンス チューニングに関する質問があります。

毎月実行する必要があるプログラムがあり、完了するまでに 24 時間以上かかります。実行時間を 12 時間以下に短縮できることを期待して、このプログラムを調整する必要があります。

このプログラムは当社で開発したものではないため、プログラムの内容を確認して修正することはできません。私にできることは、SQL サーバー プロファイラーとアクティビティ モニターを開いて、SQL コンテンツをトレースおよび分析することだけです。未使用のトリガーを無効にしてハウスキーピングを行いましたが、実行時間は 1 時間しか短縮されませんでした。

ネットワーク I/O とバッファ I/O が高くなっていることがわかりましたが、原因と意味がわかりません。

ここに画像の説明を入力

これら 2 つの問題 (ネットワーク I/O とバター I/O) の原因を誰か教えてもらえますか? このプログラムを最適化するための提案はありますか?

ありがとうございました!

0 投票する
1 に答える
2008 参照

python - Windows の subprocess.stdout からのリアルタイム読み取り

強調するために、問題は非ブロック読み取りではなくリアルタイム読み取りです。subprocess.Popen.stdout - reading stdout in real-time (again)など、以前に尋ねられました。しかし、満足のいく解決策は提案されていません。

例として、次のコードは Python シェルをシミュレートしようとします。

ただし、から読み取るとブロックされp.stdoutます。いろいろと調べてみると、以下の2つの解決策が見つかりました。

  1. を使用fctrlしてO_NONBLOCK
  2. を使用threadしてqueue

1 番目の解決策は機能し、Linux でのみ機能する可能性がありますが、2 番目の解決策はブロック読み取りを非ブロック読み取りに変えるだけです。つまり、サブプロセスのリアルタイム出力を取得できません。たとえば、「 」と入力すると、 2 番目のソリューションを使用してprint("hello")も何も得られません。p.stdout

おそらく、誰かが提案するでしょうp.communite残念ながら、ここで説明されているように標準入力を閉じるため、この場合には適していません。

それで、Windowsの解決策はありますか?

編集済み:-uをオンにしてp.stdout.readに置き換えてもp.stdout.readline、問題は依然として存在します。

解決策:以下は、JF Sebastian の回答とコメントに基づく最終的なコードです。

コマンドが出力をトリガーしない場合、プログラムがハングすることに注意してください。

0 投票する
1 に答える
712 参照

bash - Cygwin 端末バッファ STDOUT

私は、独自の Cygwin ディストリビューションに付属する Altera Quartus ソフトウェアと、Altera が Start メニューに配置したショートカットに従って実行されるダム端末を使用しています。

このバッチ ファイルは、Quartus の環境を構成し、bash を起動します。このウィンドウを使用してアルテラ ツールを実行すると、その出力がすぐに (バッファリングされずに) カラーで表示されます。

また、Xserver と端末 (lxterminal、mrxvt、xfce4-terminal など) を備えた独自の Cygwin インストールもあります。Cygwin 内で Altera の環境を構成するために Altera のバッチ ファイルを適用したので、Altera のすべてのツールを実行できます。ただし、これらのツールを実行すると、出力はカラーではなく (大したことではありませんが驚くべきことです)、すべての出力が同時に表示される実行の最後までバッファリングされます。

このバッファリングをバイパスする方法について誰か考えがありますか?