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

PHPz
풀어 주다: 2024-02-15 15:10:08
앞으로
558명이 탐색했습니다.

在 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으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿