パイプがいっぱいですが、なぜ作家を目覚めさせるのですか?

パイプがいっぱいですが、なぜ作家を目覚めさせるのですか?

https://elixir.bootlin.com/linux/v5.19/source/fs/pipe.c#L247

パイプがいっぱいになると、リーダーが目を覚ましてデータを読み取る必要はありませんか?

    /*
     * We only wake up writers if the pipe was full when we started
     * reading in order to avoid unnecessary wakeups.
     *
     * But when we do wake up writers, we do so using a sync wakeup
     * (WF_SYNC), because we want them to get going and generate more
     * data for us.
     */
    was_full = pipe_full(pipe->head, pipe->tail, pipe->max_usage);

答え1

このコードはパイプの読み込み中に実行されます。パイプを読み込んでいるので、読み取りが完了した後もパイプがいっぱいにならないため、より多くの書き込みのためのスペースがあります。

読み取りを開始する前にパイプがいっぱいになると、パイプがいっぱいでブロックされたビルダーがある可能性があります。待ち時間を最小限に抑えるために、これらのビルダーが今目覚めるのが便利です。パイプがいっぱいになっていない場合、ブロックされたライターはパイプがいっぱいであるためブロックされていないため、パイプのスペースを空にしても役に立ちません。

読者が目を覚ましたパイプを書くとき

関連情報