我有一个以非阻塞模式打开的Linux fifo。正如预期的那样,当我调用文件对象上的read时,它会立即返回。我使用select来确保没有忙碌的等待,但是当有任何数据可用时我的程序仍会收到通知。出于好奇,我尝试了readline函数,并惊讶地发现readline阻塞直到找到换行符。我通过top检查了处理器的使用情况,看起来readline并不忙等待。由于我的应用程序对性能敏感,我想知道在非阻塞套接字上使用readline时是否存在性能影响。
答案 0 :(得分: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
没有什么特别的事情发生。你确定你的观察结果是你认为的吗?