>백엔드 개발 >Golang >내 사용자 정의 '시간 초과 대기 채널'이 작동하지 않는 이유는 무엇이며 어떻게 작동하게 합니까?

내 사용자 정의 '시간 초과 대기 채널'이 작동하지 않는 이유는 무엇이며 어떻게 작동하게 합니까?

WBOY
WBOY앞으로
2024-02-12 23:06:091076검색

내 사용자 정의 시간 초과 대기 채널이 작동하지 않는 이유는 무엇이며 어떻게 작동하게 합니까?

PHP 편집기 Xiaoxin이 사용자 정의 "시간 초과 대기 채널"을 사용할 때 작동하지 않는 상황이 발생할 수 있습니다. 이는 잘못된 구성이나 코딩 문제와 같은 몇 가지 일반적인 문제로 인해 발생할 수 있습니다. 사용자 정의 "채널 대기 시간 초과"가 작동하도록 하기 위해 취할 수 있는 몇 가지 해결 방법이 있습니다. 먼저 채널과 시간 초과가 올바르게 구성되었는지 확인해야 합니다. 둘째, 시간 초과 대기 채널이 작동하지 않게 할 수 있는 오류나 논리 문제가 코드에 있는지 확인할 수 있습니다. 마지막으로, 시간 초과 대기 문제를 처리하기 위해 패키징 라이브러리를 사용하거나 타이머를 사용하여 시간 초과 상황을 모니터링하고 처리하는 등 다른 관련 기술이나 도구를 사용하는 것도 고려할 수 있습니다. 이러한 방법을 통해 사용자 정의 "시간 초과 대기 채널"이 제대로 작동하도록 만들고 애플리케이션의 성능과 안정성을 향상시킬 수 있습니다.

질문 내용

저만의 맞춤 "채널 시간 제한"을 만들려고 합니다. 보다 정확하게는 time.after 기능이 포함되어 있습니다. 즉, 저는 이것을 구현하려고 합니다:

으아아아

그런데 안타깝게도 문제가 생겼습니다.

내 구현은 다음과 같습니다.

으아아아

어떤 이유로든 작동하지 않습니다. 오류는 다음과 같습니다: 모든 고루틴이 절전 모드입니다 - 교착 상태입니다! . 어느 시점에서 모든 고루틴(메인 및 익명 함수로 도입된 고루틴)이 절전 모드로 전환된다는 것을 알고 있지만 이것이 버그의 원인인가요 아니면 다른 것인가요? 내 말은, "무한 수면"이나 "무언가에 대한 무한 대기"가 아니기 때문에 교착 상태가 아니라는 뜻이죠? 또한 all goroutine 正在休眠 - 死锁!。我知道在某个时刻,所有 goroutine(main 和用匿名函数引入的 goroutine)都会进入睡眠状态,但这是错误的原因还是其他原因?我的意思是,这不是“无限睡眠”或“无限等待某事”,所以这不是死锁,对吧?另外,使用 time.after 也会让 goroutine 休眠,对吗?我需要更改什么才能使我的程序正常工作?

解决方法

select 语句将在运行时评估所有情况,因此此代码实际上会等待 waitfun 返回,然后才开始侦听任何通道。您必须更改 waitfun를 사용하면 고루틴도 잠자기 상태가 됩니다. 그렇죠? 내 프로그램이 작동하려면 무엇을 변경해야 합니까?

🎜해결 방법🎜🎜 select 문은 런타임 시 모든 사례를 평가하므로 이 코드는 채널 청취를 시작하기 전에 실제로 waitfun이 반환될 때까지 기다립니다. 즉시 채널을 반환하려면 waitfun을 변경해야 합니다. 🎜 으아아아

위 내용은 내 사용자 정의 '시간 초과 대기 채널'이 작동하지 않는 이유는 무엇이며 어떻게 작동하게 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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