2016-05-31 3 views
0

웹 서버는 값 비싼 스레드 생성 작업을 수행하는 데 쓰레드 풀을 사용한다는 것을 알고 있습니다. 내 질문은 스레드 풀이 동일한 웹 서버에 배포 된 다른 모듈을 공유합니까?스레드가 웹 모듈간에 공유됩니까?

특히 두 개의 웹 모듈이 배포되었습니다. 하나의 모듈에서만 정의 된 필터는 threadlocal 변수를 설정합니다 (결코 해제하지 않습니다). 동일한 스레드가 거기에서 재사용되는 결과로 다른 웹 모듈에서도 볼 수있는 threadlocal일까요?

감사

답변

1

나는 모든 서버에 대해 잘 모르지만, 톰캣의 경우, 스레드 풀은 주어진 포트에 대해 설정됩니다. 따라서 모듈이 다른 포트에 배포되면 각 모듈은 별도의 스레드 풀을 갖게됩니다. 따라서 threadLocal은 주어진 모듈에서만 볼 수 있습니다.

Tomcat 구성의 샘플 추출물. 나는 다른 서버들이 비슷한 접근법을 사용하고 있다고 생각한다. 주로 웹 서버 기술에 따라 달라집니다

enter image description here

+0

감사합니다. 실험으로 로컬에서도 확인했습니다 (사용중인 Tomcat). – d56

1

.

예를 들어 Node.js는 모든 모듈을 자신의 별도 프로세스에서 실행합니다. 모든 프로세스는 서버 모듈의 JavaScript 코드를 실행하는 단일 스레드와 다른 노드 런타임 인 ​​libuv 스레드를 스레드 풀에서 비동기 작업을 수행합니다. 모든 모듈은 자체 프로세스에서 실행되기 때문에 다른 모듈과 공유되지 않는 자체 스레드 풀을 갖게됩니다. 서로 다른 프로세스가 동일한 스레드 풀을 공유 할 수 없습니다.

이야기의 도덕은 다른 웹 모듈이 어떻게 든 동일한 프로세스 내부에서 실행되는 경우 이론적으로는 동일한 스레드 풀을 공유 할 수 있지만 웹 서버가 각 프로세스의 배포 된 웹 모듈을 자체적으로 실행하는 경우 동일한 스레드 풀을 공유하는 것은 불가능합니다.

관련 문제