|
HTTP 요청 시작을 시뮬레이션하기 위해 작업 스케줄링을 하고 있는데, 작업 수가 많아지면 작업 스케줄링이 의사 사망하는 것 같습니다.
일반 Windows 시스템에서 요청되는 최대 연결 수는 2이고 서버 운영 체제에서는 10입니다. 이 동시 연결 제한을 변경하지 않으면 클라이언트가 수행할 수 있는 동시 HTTP 연결 수는 2 또는 10에 불과합니다.
System.Net.ServicePointManager.DefaultConnectionLimit 아래 그림과 같이 기본적으로 설정된 현재 최대 연결 수를 가져옵니다:
HttpClient에 기본 동시성 제한이 있나요?
예. .Net 4.0까지는 Http 작업을 위해 HttpWebRequest에 의존해 왔습니다. 기본값은 동일한 사이트에서 매우 보수적인 최대 2명의 동시성 제한으로 설정되어 있어 기본 HttpWebRequest가 원하는 속도를 얻지 못하는 경우가 많으므로(이 전략은 많은 코더를 실망시키는 것으로 추정됨) App.config 또는 ServicePointManager의 값을 수정해야 합니다. 값을 수정해야 합니다.
.Net 4.5의 MS는 Http 작업을 처리하기 위해 특별히 HttpClient 클래스를 도입했는데, 원래는 HttpClient와 HttpWebRequest가 동일한 전략을 따른다고 생각했습니다. 오늘 멀티 스레드 다운로드 애플리케이션을 작성하는 동안 10개의 동시 연결을 사용했는데 기본적으로 HttpClient에는 동시성 제한이 없다는 것을 알게 되었습니다.
Net 4.5에서이 동시성 제한을 취소 한 다음 (결국 기본적으로이 표준을 따를 사람이 없음) WebRequest로 관련 코드를 다시 작성한 결과 여전히 2 개의 동시 제한이 있고 ServicePointManager.DefaultConnectionLimit 값도 2라는 것을 발견했습니다. 즉, 즉, 즉, 즉, 즉, 즉, 즉, 즉, 즉, 즉, 즉, 즉, 즉, 즉, 즉, 즉, 즉, 즉, 즉, 즉, 즉, 즉, 즉, 즉, 즉, 즉, 즉: HttpClient는 HttpWebRequest 동시성 정책에 의해 제어되지 않으며 시스템 수준의 동시성 제한이 없습니다.
또한 테스트 결과 모든 주소의 동시성 제한이 2로 설정되어 있지 않은 것으로 나타났습니다. 예를 들어 로컬 http 주소 연결(http://localhost/*)에는 동시성 제한이 없습니다.
C# 멀티스레드 환경에서 HttpWebRequest 동시 연결 제한을 호출하는 방법
net의 HttpWebRequest 또는 WebClient에는 멀티 스레드 환경에서 동시 연결 제한이 있으며, Windows XP 및 Windows 7과 같은 데스크톱 운영 체제에서는 기본적으로 2개, 서버 운영 체제에서는 기본적으로 10개입니다. 이 동시 연결 제한을 변경하지 않으면 클라이언트에서 수행할 수 있는 동시 연결 수는 2개 또는 10개에 불과합니다. 이 제한을 변경하지 않으면 클라이언트가 동시에 설정할 수 있는 http 연결 수는 2개 또는 10개에 불과합니다. 브라우저나 웹 스파이더와 같은 애플리케이션의 경우 2개 또는 10개의 동시 연결은 너무 적어 애플리케이션의 성능에 큰 영향을 미칩니다. 이 동시 연결 제한의 이유는 http 1.0 및 http 1.1 표준에서 최대 동시 연결 수를 2로 지정하기 때문입니다. 그러나 주요 브라우저는 더 이상 이 규칙을 따르지 않지만 .net 프레임워크는 여전히 기본적으로 이 규칙을 따릅니다.
많은 문서에서 HttpWebRequest에 비동기식으로 액세스하면 동시성 성능이 향상될 수 있다고 하지만, 제 테스트에서는 기본 동시 연결 수를 변경하지 않으면 동기 및 비동기 액세스 모두 성능이 저하되는 것으로 나타났습니다.
app.config에서 최대 동시 연결 수를 다음과 같이 설정할 수도 있습니다:
다음 문서를 참조하세요.
h ttps:// blog.csdn.net/defender_/article/details/91949613 h ttps:// www.cnblogs.com/quanying/p/4629827.html
|
이전 기사이 애플리케이션을 계속 사용하려면 최신 버전을 적용해야합니다.다음:타사 jar 패키지를 Nexus 비공개 저장소에 푸시하는 Maven 명령
|