>  기사  >  백엔드 개발  >  파이프 io를 기다리는 동안 교착 상태가 발생했습니다. Goroutine에서 복사

파이프 io를 기다리는 동안 교착 상태가 발생했습니다. Goroutine에서 복사

PHPz
PHPz앞으로
2024-02-15 15:10:08510검색

在 Goroutine 中等待管道 io.Copy 时发生死锁

고루틴에서 파이프라인 io.Copy를 기다리는 동안 교착 상태가 발생하는 것은 일반적인 문제입니다. 고루틴에서 io.Copy가 완료될 때까지 기다릴 때 파이프가 제대로 닫히지 않으면 교착 상태가 발생합니다. 이 경우 고루틴은 계속 데이터를 기다리며 실행을 계속할 수 없습니다. 이 문제에 대한 해결책은 io.Copy가 완료된 후 파이프를 수동으로 닫아 고루틴이 제대로 종료될 수 있는지 확인하는 것입니다. PHP 편집기 Apple은 이러한 유형의 교착 상태 상황을 더 잘 처리하는 데 도움이 되기를 바라며 이 문제의 원인과 해결책을 자세히 소개했습니다.

질문 내용

아래 코드에서 io.copy 的调用永远不会返回;它只是无限期地阻塞,导致死锁。仅当使用 io.pipeio.reader 连接到 os.stdout io.writer 时,才会发生此行为。但是,我需要使用管道,因为在我的完整代码中,我使用 io.multiwriterio.pipes 将一个 io.reader 连接到许多需要 io.reader에 대한 함수입니다.

으아악

출력:

으아악

코드에 대한 플레이그라운드 링크는 다음과 같습니다: https://goplay.tools/snippet/70ubgiz8ftv

보존하면서 교착상태를 피할 수 있는 방법이 있나요io.pipe?

해결 방법

완료되면 파이프의 쓰기 끝을 닫습니다.

으아악

그렇지 않으면 독자는 무기한 기다리게 됩니다.

위 내용은 파이프 io를 기다리는 동안 교착 상태가 발생했습니다. Goroutine에서 복사의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제