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
이 코드는 파이프를 읽는 동안 실행됩니다. 파이프를 읽는 중이므로 읽기가 완료된 후에도 파이프가 가득 차지 않으므로 더 많은 쓰기를 위한 공간이 있습니다.
읽기를 시작하기 전에 파이프가 가득 차면 파이프가 가득 차서 차단된 작성기가 있을 수 있다는 의미입니다. 대기 시간을 최소화하기 위해 이러한 작성기가 지금 깨어나는 것이 유용합니다. 파이프가 가득 차 있지 않은 경우 차단된 기록기는 파이프가 가득 차 있기 때문에 차단되지 않으므로 파이프의 공간을 비워도 도움이 되지 않으며 깨어나지도 않습니다.
독자들이 깨어났다파이프를 쓸 때.