Linux IO优先级 - fifo命令?...要么?

R..*_*R.. 0 c linux posix linux-kernel

假设两个进程(或线程)都调用write缓冲区已满的管道/套接字/终端,从而阻塞.当缓冲区空间可用时,是否可以保证谁首先写入?是FIFO订单吗?在全球范围内,还是在给定的优先级范围内,首先按优先级排序?还是完全随机/不确定?

饥饿的读书怎么样?首先调用read的数据会在数据可用时获取吗?

我在Linux上专门问一下,据我所知POSIX对这些问题没什么可说的,但是如果我错了,我也会感兴趣并且POSIX确实要求特定的行为.

caf*_*caf 5

在内核中,pipe_wait()管道读取器和写入器都使用该函数来阻塞.此函数使用DEFINE_WAIT()宏来定义等待队列,该.flags等待队列将等待队列的成员设置为零.

它们与一个电话唤醒wake_up_interruptible_sync_poll(),它调用到__wake_up_common().你可以看到,如果.flags成员没有WQ_FLAG_EXCLUSIVE设置位(如本例所示),那么所有的服务员都会被毫不客气地制成可运行的.

然后,调度程序将使用其正常的启发式方法来选择要运行的可运行进程.特别是,后来具有更高优先级的服务员将首先获得 - 但请注意,如果您有多个处理器核心可用,则多个服务员可以同时开始运行,哪个实际上首先接触管道取决于完全取决于哪一个设法先抓住管道锁.