我有一个以非阻塞模式打开的 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 回答