2013-01-21 2 views
2

다음은 간단한 시나리오입니다.응용 프로그램 서버가 동일한 사용자의 각 요청에 대해 새 스레드를 생성합니까?

사용자가 웹 응용 프로그램의 웹 페이지에서 일부 작업을 트리거합니다. 이 작업은 무거 우며 시간이 좀 더 걸립니다.

그리고 서버 측에서 작업이 완료되기 전에 사용자 트리거가 다른 매개 변수를 사용하여 동일한 작업을 수행합니다. 두 번째 요청에 대한 두 번째 작업도 처리를 시작합니다.

그래서이 경우 첫 번째 요청을 처리하는 첫 번째 요청과 두 번째 요청을 처리하는 두 개의 다른 스레드가 있습니까? 또는 두 요청을 모두 처리하는 스레드 일뿐입니다. 두 번째 요청을 실행하기 위해 첫 번째 작업이 중단되었습니다 (미완료 상태)?

사용자가 동일한 작업을 여러 번 요청하는 것을 방지하고 싶지 않습니다. 어떻게 작동하는지 알고 싶습니다.

이것은 바보 같은 질문 일지 모르지만 나는 이것과 거의 혼동하지 않습니다. 그리고 저와 함께 일어나고있는 일은 혼란에 가담하는 것입니다. 나를 위해 그것은 첫 번째 요청에 대한 작업이 완료되지 않는 것 같습니다.

웹 스피어 애플리케이션 서버가 도움이된다면 그것입니다.

+0

동작을 트리거하는 내용을 설명하십시오. 사용자가 동시에 2 개의 HTTP 요청을하는 것을 의미합니까? –

+0

예. 그러나 한 요청보다 다른 요청이 많습니다. – Nils

답변

2

WebSphere 웹 컨테이너는 모든 요청에 ​​대해 스레드 풀을 사용합니다.

누가 요청했는지에 상관없이 (누가 작성했는지는 중요하지 않음) 풀에서 스레드를 가져 오면 요청이 처리되어 스레드가 풀로 돌아갑니다.

요청이 차례로 진행되는 경우에도 동일한 스레드가 요청을 처리한다는 보장은 없습니다.

하나의 요청이 다른 요청을 방해하는 경우, WebSphere에서 동작하는 방식이 아닌 코드에서 수행하는 것이 가장 가능성이 높습니다.

2

아니요. 각 요청은 다른 요청과 독립적입니다. websphere에는 스레드 선호도가 없습니다. urself를 가르치는 좋은 방법 중 하나는 websphere 로그를 체크 아웃하는 것입니다. WebSphere가 로그 파일에 레코드를 기록 할 때. SystemOut.log 등 로그에는 스레드 ID가 포함됩니다.

: 여기서는 WebSphere 로그 파일에 기록하는 예이다 12/11/08 13 : 06 : 36 : 중부 표준시 08시 30분]가 0000002e 가상 호스트 I .....

번째 필드는 스레드 ID가있는 "0000002e"입니다. 이렇게하면 두 개의 요청이 두 개의 다른 스레드에 의해 처리되는 방법을 상관시킬 수 있습니다. 그것이 당신에게 이해되기를 바랍니다.