2017-05-03 1 views
0

goroutine을 사용하는 이상한 행동이 발생하고 있으며 잘못된 행동에 대한 조언이나 의견을 제공해주십시오.goroutine의 성능에 영향을 미치는 요인

나는 시뮬레이션을 동시에 수행하기 위해 goroutines를 사용하고 있지만, 어떤 이유로 나는 합법적 인 시간 내에 시뮬레이션을 끝낼 수없는 goroutines의 수와 함께 증가하는 시간을 보냈다. 시작 모든 10,000 goroutines를 들어

  1. , 내가 CPU 나 메모리의 부족이 표시되지 않는 오초

  2. 에 의해 계산 시간이 증가 다음은 내가 알 것입니다. 그러나 CPU 사용은 매 10k goroutines마다 조금씩 증가합니다. 내가 200K goroutines을 넣어 예를 들어, CPU 사용량은 약 70 % 나 디스크

  3. 나는 goroutines를 트리거하지 않고 시뮬레이션을 실행하고 속도 저하가 내부 또는 그래서 그것은 매우 빠르게 완료를 사용하지 않는

  4. goroutines 때문에

  5. 나는 각 goroutine 내부에 추가 goroutine을 사용하여 병렬로 작업을 시도했다. CPU 사용량이 100 %로 향상되었지만 전반적인 속도가 50 % 감소했습니다 ...

  6. 포인터를 사용하여 일부 큰 구조체를 goroutines에 전달할 예정입니다. 모든 goroutine은 동일한 데이터를 사용합니다.

내가 최적화 할 필요가 있거나 수행 할 수있는 테스트를 제안 할 사람이 있습니까? 감사!

+0

이동 루틴이 구조체의 데이터를 수정하고 있습니까? – Acidic

+5

모든 goroutine이 지속적으로 실행되는 경우 (즉, I/O에서 차단되지 않는 경우) 시스템이 동시에 실행할 수있는 스레드 수보다 많은 goroutines를 가짐으로써 성능 이점을 얻지 못할 것입니다. 사실, 더 많은 goroutine을 사용하면 오버 헤드로 인해 느려질 수 있습니다. –

답변

0

"worker"goroutines를 시작하고 via 채널에 "jobs"를 보냅니다. 많은 CPU를 소비하는 많은 메모리 할당을 절약 할 수 있습니다.

관련 문제