>백엔드 개발 >Golang >고루틴은 일찍 잠에 들어갑니다

고루틴은 일찍 잠에 들어갑니다

PHPz
PHPz앞으로
2024-02-09 11:30:311153검색

Goroutine 过早进入睡眠状态

php 편집기 바나나는 여러분에게 일반적인 문제를 소개하기 위해 왔습니다. 즉, 고루틴이 너무 일찍 잠자기 상태가 됩니다. Go 언어에서 고루틴을 사용하여 작업을 동시에 실행하는 것은 매우 효율적이지만, 때로는 작업을 실행하기 전에 고루틴이 절전 상태에 들어가 작업이 정상적으로 진행되지 않는 상황이 발생합니다. 이 글에서는 이 문제의 원인을 자세히 설명하고 모든 사람이 고루틴을 더 잘 이해하고 사용할 수 있도록 솔루션을 제공합니다.

질문 내용

코드:

으아악

이 코드는 특별한 작업을 수행하지 않으며 단지 채널과 고루틴을 이해하고 싶습니다. 그러나 문제가 발생하여 코루틴이 두 번 반복된 후 잠자기 상태가 되었고 앱이 충돌했습니다.

무엇을 하는지 분석해 봅시다. 매초마다 link。函数 b 在两个地方接收它,因此调用了 printa와 b에게 메시지가 전송됩니다. 따라서 기본적으로 매초마다 a와 b가 콘솔에 나타나야 합니다. 그러나 나에게 알려지지 않은 이유로 이런 일이 발생하지 않습니다. 프로그램은 a와 b를 한 번 인쇄한 다음 충돌합니다. 아마도 나는 개념을 충분히 이해하지 못할 것입니다(golang은 실제로 직관적이지 않습니다). 따라서 여기에서 답변을 얻을 수 있기를 바랍니다.

해결 방법

버퍼되지 않은 채널로 보내는 것은 해당 채널에서 데이터를 수신하는 고루틴이 있는 경우에만 성공합니다. 처음 두 번의 전송에는 link 通道接收。但是它们收到一个值并终止,并且不再有任何 goroutine 从 link 接收,因此第三个发送到 link 의 고루틴 블록이 있습니다. 실행 중인 다른 고루틴이 없기 때문에 프로그램이 교착 상태에 빠지게 됩니다.

위 내용은 고루틴은 일찍 잠에 들어갑니다의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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