작업을 완료하기 위해 고루틴을 만들려고 합니다
그래서 이 코드를 작성했습니다. 종속성이 없는 a, b, c와 같은 작업은 구현하기 쉽고 잘 실행됩니다. 종속 작업 d와 e를 구현할 때 몇 가지 문제가 발생했습니다. 각 작업에는 2개 작업의 종속성이 있습니다.
각 작업에 대한 채널을 생성한 다음 종속 작업이 완료된 후 종속 작업 수를 줄이기 위해 종속 작업이 읽을 메시지를 전달하는 하나의 연결 지점만 남았습니다. 코드에서 checkpoint 1
주석을 참조하세요.
이 문제를 해결하도록 도와줄 사람이 있나요? 이 경우 고루틴을 구현하는 방법에 대한 부분에서 막혔습니다.
코드:
으아아아예제 출력:
으아아아위의 누락된 구현으로 인해 현재 5개의 데이터 경합이 발견되었습니다
. 发现 5 个数据竞争
。
我认为您可以使用较小的任务结构和 waitgroup
waitgroup
의 도움을 사용하면 위의 시나리오를 달성할 수 있다고 생각합니다. 다음은 설명을 위해 몇 가지 메모를 함께 정리한 예입니다.
으아아아
물론 이것이 완벽한 해결책은 아닙니다. 이미 처리되지 않는 상황이 많이 있다는 것을 알 수 있습니다a => d
和 d => a
또는 여러 작업이 다른 작업에 종속되는 경우 그 이유는 채널에서 동일한 값을 한 번만 읽을 수 있기 때문입니다. hacky
위 내용은 go 루틴을 사용하여 Pub Sub 만들기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!