고루틴의 결과를 슬라이스로 수집
고루틴을 활용하여 데이터를 동시에 처리하고 결과를 수집하는 것은 어려울 수 있으며, 특히 동시성과 스레드를 관리할 때 더욱 그렇습니다. 안전. 결과를 수집하기 전에 모든 고루틴이 완료될 때까지 기다리도록 대기 그룹에 신호를 보내 코드에서 교착 상태 오류가 발생했습니다.
이 문제를 해결하려면 모든 고루틴이 완료된 후 결과 채널을 비동기적으로 닫아야 합니다. 그들의 임무. 코드의 수정된 버전은 다음과 같습니다.
for i, line := range contents { wg.Add(1) go newSample(line, *replicatePtr, *timePtr, sampleChan, &wg) } go func() { wg.Wait() close(sampleChan) }() for s := range sampleChan { // Process results }
이 변경으로 인해 모든 고루틴이 완료되면 결과 채널이 닫혀서 결과를 올바르게 수집할 수 있습니다.
또한 향상된 코드 명확성과 테스트 용이성을 위해 newSample을 대기 그룹 및 채널을 사용하는 대신 결과를 생성하는 동기 함수로 리팩터링하는 것이 좋습니다. 이를 통해 동시성 문제를 더 명확하게 분리하고 테스트를 더 쉽게 할 수 있습니다.
이러한 조정을 구현하면 고루틴에서 효율적으로 결과를 수집하고 교착 상태 오류를 방지할 수 있습니다.
위 내용은 고루틴의 결과를 슬라이스로 수집할 때 교착 상태를 피하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!