0

私はこのプログラムを作成しました。このプログラムでは、スレッドがchar *バッファーを受け取り、次のように作成されたパイプに書き込みます。

 ret_val = mkfifo(lpipename.c_str(), 0666);
 pipehandler = open(lpipename.c_str(), O_RDWR);

次に、次のように次々にバッファをパイプに書き込みます。

 int size = string(pcstr->buff).length()
 numWritten = write(pipehandler, pcstr->buff, size);

各pcstr->buffは、事前構成されたサイズ1〜5MBのmallocされたサイズへのポインターです。

ただし、(別のソースからの)pcstr-> buffを埋めるよりも、パイプへの書き込みに時間がかかりすぎて、プログラムの実行が遅くなります。

誰かがより速い書き込み方法のアイデアを持っていますか?

ありがとう

4

1 に答える 1

2

各pcstr->buffは、事前構成されたサイズ1〜5MBのmallocされたサイズへのポインターです。

長さをどこかに保存するだけです。サイズを確認するためだけにコピーするstd::stringのはかなり無駄です。またはを使用しますstrlen()

ただし、(別のソースからの)pcstr-> buffを埋めるよりも、パイプへの書き込みに時間がかかり、プログラムの実行が遅くなります。

Linuxでは、現在のデフォルトの最大パイプバッファサイズは1Mbです。パイプに1Mb以上を書き込むとおっしゃいました。これが発生すると、パイプからのデータが消費されるまで書き込みスレッドがブロックされます。

誰かがより速い書き込み方法のアイデアを持っていますか?

/dev/shmまたはでプレーンファイルを使用します/tmp。最新のLinux/tmpには、メモリ内のファイルシステムがあります。ただし、これは、パイプを介して送信されるデータの量を、空きディスク領域またはメモリの量をオーバーフローさせることなくファイルに保存できる場合にのみ機能します。

于 2012-11-15T09:16:50.900 に答える