>  기사  >  백엔드 개발  >  go 루틴을 사용하여 Pub Sub 만들기

go 루틴을 사용하여 Pub Sub 만들기

王林
王林앞으로
2024-02-06 09:35:07680검색

使用 go 例程创建 pub sub

질문 내용

작업을 완료하기 위해 고루틴을 만들려고 합니다

그래서 이 코드를 작성했습니다. 종속성이 없는 a, b, c와 같은 작업은 구현하기 쉽고 잘 실행됩니다. 종속 작업 d와 e를 구현할 때 몇 가지 문제가 발생했습니다. 각 작업에는 2개 작업의 종속성이 있습니다.

각 작업에 대한 채널을 생성한 다음 종속 작업이 완료된 후 종속 작업 수를 줄이기 위해 종속 작업이 읽을 메시지를 전달하는 하나의 연결 지점만 남았습니다. 코드에서 checkpoint 1 주석을 참조하세요.

이 문제를 해결하도록 도와줄 사람이 있나요? 이 경우 고루틴을 구현하는 방법에 대한 부분에서 막혔습니다.

코드:

으아아아

예제 출력:

으아아아

위의 누락된 구현으로 인해 현재 5개의 데이터 경합이 발견되었습니다 . 发现 5 个数据竞争


正确答案


我认为您可以使用较小的任务结构和 waitgroup

정답

더 작은 작업 구조와 동기화를 위한 waitgroup의 도움을 사용하면 위의 시나리오를 달성할 수 있다고 생각합니다.

다음은 설명을 위해 몇 가지 메모를 함께 정리한 예입니다.

으아아아

물론 이것이 완벽한 해결책은 아닙니다. 이미 처리되지 않는 상황이 많이 있다는 것을 알 수 있습니다
  • 예를 들어a => dd => a
  • 순환 종속성은 결국 교착 상태로 이어질 것입니다

또는 여러 작업이 다른 작업에 종속되는 경우 그 이유는 채널에서 동일한 값을 한 번만 읽을 수 있기 때문입니다. hacky

🎜첫 번째 문제를 해결하려면 종속성 그래프를 작성하고 순환적인지 확인해야 할 수도 있습니다. 두 번째의 경우 🎜 방법은 🎜 일 수 있습니다. 으아아아

위 내용은 go 루틴을 사용하여 Pub Sub 만들기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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