파이프가 가득 차 있는데 왜 작가를 깨우나요?

파이프가 가득 차 있는데 왜 작가를 깨우나요?

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

이 코드는 파이프를 읽는 동안 실행됩니다. 파이프를 읽는 중이므로 읽기가 완료된 후에도 파이프가 가득 차지 않으므로 더 많은 쓰기를 위한 공간이 있습니다.

읽기를 시작하기 전에 파이프가 가득 차면 파이프가 가득 차서 차단된 작성기가 있을 수 있다는 의미입니다. 대기 시간을 최소화하기 위해 이러한 작성기가 지금 깨어나는 것이 유용합니다. 파이프가 가득 차 있지 않은 경우 차단된 기록기는 파이프가 가득 차 있기 때문에 차단되지 않으므로 파이프의 공간을 비워도 도움이 되지 않으며 깨어나지도 않습니다.

독자들이 깨어났다파이프를 쓸 때.

관련 정보