>  기사  >  백엔드 개발  >  멀티스레드 요청이 진행 중이고 높은 RPS를 얻지 못함

멀티스레드 요청이 진행 중이고 높은 RPS를 얻지 못함

WBOY
WBOY앞으로
2024-02-09 16:48:10939검색

go 中的多线程请求并且没有获得高 RPS

php 편집자 Xigua는 Go 언어를 사용하여 멀티 스레드 요청을 할 때 때때로 높은 RPS(초당 요청) 속도를 얻을 수 없다는 점을 발견했습니다. Go 언어는 동시성 처리에 탁월하지만 어떤 경우에는 멀티스레드 요청이 그리 효율적이지 않습니다. 이는 네트워크 대기 시간, 리소스 경쟁 등의 요인으로 인해 발생할 수 있습니다. 이 기사에서는 이 문제를 살펴보고 Go 언어의 다중 스레드 요청 RPS를 개선할 수 있는 몇 가지 가능한 솔루션을 제공합니다.

질문 내용

서버를 테스트하기 위해 다중 스레드 클라이언트를 작성하려고 합니다. 2개의 고루틴을 사용하면 모든 것이 괜찮습니다. 50,000 rps를 얻고 CPU 로드는 정상이지만, 2개 이상의 고루틴을 생성하면 rps는 3,000으로 떨어지지만 CPU 로드는 초과됩니다. 클라이언트 코드를 여러 번 실행하면(동시에 3개의 콘솔에서 동일한 코드를 실행하는 것과 같이) 80,000rps와 같은 더 많은 rps를 얻습니다.

이것은 내 클라이언트 코드입니다

으아악

이것은 내 서버 측 코드입니다

으아악

처음에는 go가 모든 클라이언트 연결에 하나의 포트를 사용한다고 생각했는데, netstat로 확인해 보니 여러 포트를 사용하고 있었습니다. 검색을 시도했지만 적합한 답변을 찾을 수 없습니다

sync.mutex를 사용해 보았습니다:

으아악

위 변경으로 13,000RPS를 얻었고 CPU 로드는 괜찮았지만 단순히 충분하지 않았습니다.

해결 방법

한 호스트에만 요청을 보내기 때문에 http 전송의 기본값은 적합하지 않습니다. 상황에 따라 매개변수를 수동으로 설정하는 것이 더 좋습니다:

으아악

자세한 내용은 여기에서 확인할 수 있습니다.

위 내용은 멀티스레드 요청이 진행 중이고 높은 RPS를 얻지 못함의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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