ノンブロッキング モードで開かれた Linux fifo があります。予想どおり、ファイル オブジェクトで read を呼び出すと、すぐに戻ります。select を使用して、ビジー待機がないことを確認しますが、使用可能なデータがある場合でもプログラムに通知されるようにします。好奇心から readline 関数を試してみたところ、改行文字が見つかるまで readline がブロックされることに驚きました。top を介してプロセッサの使用状況を調べたところ、readline がビジー状態で待機していないようです。私のアプリケーションはパフォーマンスに敏感なので、ノンブロッキング ソケットで readline を使用するとパフォーマンスに影響があるかどうか疑問に思っています。
1607 次
1 に答える
1
Python の readline のコア部分は fileobject.c:get_line にあり、
FILE_BEGIN_ALLOW_THREADS(f)
FLOCKFILE(fp);
while ((c = GETC(fp)) != EOF &&
(*buf++ = c) != '\n' &&
buf != end)
;
FUNLOCKFILE(fp);
FILE_END_ALLOW_THREADS(f)
どこ
#ifdef HAVE_GETC_UNLOCKED
#define GETC(f) getc_unlocked(f)
#define FLOCKFILE(f) flockfile(f)
#define FUNLOCKFILE(f) funlockfile(f)
#else
#define GETC(f) getc(f)
#define FLOCKFILE(f)
#define FUNLOCKFILE(f)
#endif
特別なことは何も起こっていません。あなたの観察は、あなたが考えているものであると確信していますか?
于 2010-01-19T23:05:43.310 に答える