2013-06-13 2 views
3

네트워킹/운영 체제에 대한 최근 학교 수업에서 스레드 풀에 대해 배웠습니다. 이제 그는 기본 기능이 매우 간단하고 이해합니다.스레드 풀이 고갈되면 어떻게됩니까?

그러나 내 책에서 지정하지 않은 것은 스레드 풀이 고갈되었을 때 어떻게됩니까? 예를 들어, 20 개의 스레드가있는 풀이 있고 연결된 클라이언트가 20 개 있습니다. 다른 클라이언트가 연결을 시도하지만 풀에 스레드가 남아 있지 않습니다. 그런 다음 어떻게됩니까? 클라이언트가 대기열에 들어가 있습니까? 시스템이 풀에 넣을 다른 스레드를 만드나요? 다른 것?

답변

3

답변은 언어, 운영 체제 및 풀 구현에 따라 크게 달라집니다.

스레드 풀이 고갈되면 어떻게됩니까? 다른 클라이언트가 연결을 시도하지만 풀에 스레드가 남아 있지 않습니다. 그런 다음 어떻게됩니까? 클라이언트가 대기열에 들어가 있습니까?

일반적으로 서버 상황에서는 소켓 설정에 따라 다릅니다. 소켓 연결이 OS에 의해 큐에 저장되거나 연결이 거부됩니다. 대개 이 아니며 스레드 풀에서 처리하는이 아닙니다. ~ unix 운영 시스템에서이 큐 또는 "백 로그"는 listen method에 의해 처리됩니다.

시스템에서 풀에 넣을 다른 스레드가 있습니까?

이것은 스레드 풀에 따라 다릅니다. 일부 풀은 고정 크기이므로 스레드가 더 이상 추가되지 않습니다. 다른 스레드 풀은 "캐시 된"스레드 풀이므로 사용 가능한 스레드를 다시 사용하거나 사용 가능한 스레드가없는 경우 새 스레드를 만듭니다. 많은 웹 서버는 풀에 최대 스레드 설정을 가지고 있으므로 원격 사용자가 너무 많은 동시 연결을 시작하여 시스템을 스 래시하지 않습니다.

+0

, 감사합니다 :) – user757926

0

스레드 풀 구현에 따라 다릅니다. 대기열에 넣을 수도 있고, 새 스레드를 만들거나 나중에 다시 와야한다는 오류 메시지가 나타날 수도 있습니다. 또는 스레드 풀을 구현하는 사람이라면 원하는대로 할 수 있습니다.

1

그것은 스레드 풀에서 사용 정책에 따라 달라집니다 풀 크기가 정적 등을 할 수 있습니다

  • 새 스레드는 세마포어와 같은 동기화 기본에 대기 발신자를 요청하는 경우 또는 요청을 대기열에 푸시 할 수 있습니다.

  • 풀 크기는 무제한 일 수 있지만 너무 많은 스레드를 만들면 성능이 크게 저하 될 수 있으므로 위험 할 수 있습니다. 더 자주 주목 때보 다 은 최소 및 풀이 문맥에 따라 동적 정책 사용할 수

  • 풀 사용자가 설정 한 최대 사이이다이다 자원 CPU 나 RAM 등 하드웨어 OS 동기화 프리미티브 및 스레드와 같은 리소스, 현재 프로세스 리소스 (메모리, 스레드, 핸들 ...)

스마트 스레드 풀의 예 : http://www.codeproject.com/Articles/7933/Smart-Thread-Pool 의미가

관련 문제