우리는 현재 여러 제품에 대한 견적을 수행하는 ASP.NET 응용 프로그램을 향상시키고 있습니다.장기 실행 ADO.NET 쿼리와 함께 ThreadPool 스레드를 사용합니다. 확장 성이 있습니까?
현재 기존 견적 엔진은 기본적으로 큰 저장 프로 시저 (호출 당 2-3 초) 다음에 프로 시저 호출 후에 실행되는 소량의 비즈니스 논리가 뒤 따른다.
우리는 따옴표 세트의 속도를 높이기 위해 각 제품에 대한 호출을 멀티 스레딩하는 방법을 모색 중입니다.
현재 우리의 접근 방식은 각 제품 견적 작업을 ThreadPool 스레드에 캡슐화하는 것입니다. 이것은 성능이 훨씬 좋아진 것으로 보이지만 적은 수의 사용자와 실적이 좋지만 프로덕션 환경에서 확장 성이 우수 할까 걱정됩니다.
현재 비동기 ADO.NET 메서드를 사용하고 있지 않습니다.
참고 : ThreadPool을 호출하는 코드에는 ThreadPool의 구성 가능한 양만 한 번에 사용할 수 있도록 요청을 대기시키는 스로틀이 있습니다. 동일한 페이지에서 견적 결과를 기다릴 필요가 없으며 사용자가 진행하고 업데이트를 확인할 수 있습니다 (견적 결과 페이지는 AJAX를 사용하여 결과를 확인합니다).
추가 정보 : 선호하는 솔루션은 견적 서비스가 단방향 조작이기 때문에 메시지 대기열을 사용하는 것입니다. 그러나 프로젝트의 시간 척도는이를 수행 할 시간을 제공하지 못했습니다.
그 동안 우리는 ADO.NET의 비동기 메서드를 사용하도록 구현을 수정하려고합니다 (프로세스의 모든 장기 실행 측면이 그렇듯이) ThreadPool 스레드를 사용할 필요가 없습니다.
안녕 릭, 내가 추가하는 것을 잊었다 , 우리는 기본적으로 스레드에서 얼마나 많은 스레드 주위 스로틀을 넣었습니다. 내 질문을 수정하겠습니다. – spooner
스레드 수를 제한해야한다면 처리 할 수있는 동시 요청 수가 제한되지 않습니까? 한 번에 처리 할 수있는 조작의 수에 따라 확장 성이 정의되지 않았습니까? – RickNZ
공정한 포인트 :) 이 접근법은 다음과 같습니다. 단일 스레드 풀 스레드에서 모든 인용 부호를 실행합니다 (페이지를 위로 올려 놓고 따옴표를 백그라운드에서 실행). 그런 다음 따옴표의 논리에서 ADO.NET의 비동기 메서드 (대신 IO 스레드를 사용한다고 생각합니다)를 사용합니다. – spooner