KR101576628B1 - 스레드 풀의 사이즈를 동적으로 관리하는 방법, 서버 및 컴퓨터 판독 가능한 기록매체 - Google Patents

스레드 풀의 사이즈를 동적으로 관리하는 방법, 서버 및 컴퓨터 판독 가능한 기록매체 Download PDF

Info

Publication number
KR101576628B1
KR101576628B1 KR1020150067663A KR20150067663A KR101576628B1 KR 101576628 B1 KR101576628 B1 KR 101576628B1 KR 1020150067663 A KR1020150067663 A KR 1020150067663A KR 20150067663 A KR20150067663 A KR 20150067663A KR 101576628 B1 KR101576628 B1 KR 101576628B1
Authority
KR
South Korea
Prior art keywords
size
work queue
maximum thread
value
thread value
Prior art date
Application number
KR1020150067663A
Other languages
English (en)
Inventor
유경민
남궁문
윤경구
Original Assignee
주식회사 티맥스 소프트
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 주식회사 티맥스 소프트 filed Critical 주식회사 티맥스 소프트
Priority to KR1020150067663A priority Critical patent/KR101576628B1/ko
Priority to US14/791,771 priority patent/US9354931B1/en
Application granted granted Critical
Publication of KR101576628B1 publication Critical patent/KR101576628B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5011Pool
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5018Thread allocation

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

본 발명의 일 태양에 따르면, 스레드 풀(thread pool)의 사이즈를 동적으로 관리하는 방법에 있어서, (a) 상기 스레드 풀에 포함된 스레드의 수가 현재 설정되어 있는 최대 스레드 값에 소정의 범위 내로 근접하면, 프로세서가, 상기 현재 설정되어 있는 최대 스레드 값을 증가시키는 단계, 및 (b) 상기 프로세서가, 작업 큐의 사이즈에 대한 정보를 참조로 하여, 상기 최대 스레드 값이 증가하기 이전의 작업 큐의 사이즈와 상기 최대 스레드 값이 증가한 이후의 작업 큐의 사이즈를 비교하고, 상기 최대 스레드 값이 증가한 이후의 작업 큐의 사이즈가 상기 최대 스레드 값이 증가하기 이전의 작업 큐의 사이즈보다 크거나 같을 경우, 상기 최대 스레드 값을 다시 증가시키는 단계를 포함하는 방법이 제공된다.

Description

스레드 풀의 사이즈를 동적으로 관리하는 방법, 서버 및 컴퓨터 판독 가능한 기록매체{METHOD, SERVER AND COMPUTER-READABLE RECORDING MEDIUM FOR MANAGING SIZE OF THREAD POOL DYNAMICALLY}
본 발명은 스레드 풀의 사이즈를 동적으로 관리하는 방법, 서버 및 컴퓨터 판독 가능한 기록매체에 관한 것으로, 보다 상세하게는, (a) 스레드 풀에 포함된 스레드의 수가 현재 설정되어 있는 최대 스레드 값에 소정의 범위 내로 근접하면, 상기 현재 설정되어 있는 최대 스레드 값을 증가시키고, (b) 작업 큐의 사이즈에 대한 정보를 참조로 하여, 상기 최대 스레드 값이 증가하기 이전의 작업 큐의 사이즈와 상기 최대 스레드 값이 증가한 이후의 작업 큐의 사이즈를 비교하고, 상기 최대 스레드 값이 증가한 이후의 작업 큐의 사이즈가 상기 최대 스레드 값이 증가하기 이전의 작업 큐의 사이즈보다 크거나 같을 경우, 상기 최대 스레드 값을 다시 증가시키는 프로세스를 수행하기 위한 방법, 서버 및 컴퓨터 판독 가능한 기록매체에 관한 것이다.
스레드(Thread)란, 프로세스 내에서 실행되는 흐름의 단위로서, 특정한 서비스 요청을 처리하는데 필요한 정보이다. 스레드는 특정한 서비스 요청을 처리하기 위한 스레드 ID, 프로그램 카운터, 레지스터 집합, 스택 등을 가지며 코드, 데이터, 파일 등의 기타 자원을 다른 스레드와 공유한다.
종래의 서버는 클라이언트의 요청이 들어올 때마다 스레드를 생성하여 처리하는데 이는 대부분의 작업을 처리하기에는 충분히 효율적인 메커니즘이다. 그러나, 클라이언트로부터의 연결과 종료가 매우 바쁘게 일어나는 서버의 경우, 스레드를 생성하고 제거하는데 걸리는 시간이 요청을 처리하는데 드는 시간보다 많아지면서 시스템의 성능이 저하되는 문제가 발생한다. 또한, 클라이언트의 요청이 급격히 많아지는 경우 각 요청에 대해 모두 스레드를 생성하게 되면 스레드 개수가 과도하게 많아짐으로 인해 스레드 스케줄링이 필요하게 되고 이로 인해 시스템의 오버헤드가 증가하게 된다.
이러한 문제를 해결하기 위해 제한된 개수의 스레드를 미리 생성하고 사용된 스레드를 제거하지 않고 재활용할 수 있는 스레드 풀(thread pool)이 제안되었다.
스레드 풀(Thread Pool)은 적어도 하나의 스레드를 포함하는 스레드 집합으로, 사용된 스레드를 폐기하지 않고 다른 작업에 할당함으로써 스레드를 재활용한다. 구체적으로 스레드 풀은 프로세서가 특정 작업을 수행하는 경우 스레드를 제공하고 프로세서가 작업을 처리하고 스레드를 반환하면 대기하다가 다른 작업을 전달받는 방식으로 동작한다.
스레드 풀은 최소로 유지해야 하는 스레드 개수(minimum size, 이하 최소 스레드 값이라 함)와 최대로 생성할 수 있는 스레드 개수(maximum size, 이하 최대 스레드 값이라 함)를 가지고 있다. 그러나, 서버의 성능을 최적화할 수 있는 적정 수의 최소 스레드 값과 최대 스레드 값을 결정하는 것은 쉽지 않다.
종래의 방식은 서비스 요청의 수나 종류에 따른 최소 스레드 값과 최대 스레드 값을 미리 설정하여 성능을 측정하고 측정된 성능을 활용하여 최적의 스레드 개수를 결정하는 방식이 대부분이었다. 하지만, 이와 같이 성능 기록에 의존하는 방식은 성능 기록을 쌓기 위해 실험하는 동안 시간이 필요하고, 실시간으로 빠르게 변화하는 웹 환경에서는 기록의 정확성을 보장하기 어려워 적절한 최소 스레드 값이나 최대 스레드 값을 결정하는데 어려움이 있다.
또한, 종래에는 필요한 스레드 수를 예측하여 필요한 스레드를 미리 생성하는 방식도 있었으나 요청이 있는 경우 스레드를 생성하는 것과 성능상의 차이가 크지 않고, 마찬가지로 빠르게 변화하는 웹의 특성상 예측의 정확성을 장담하기 어려웠다.
이 밖에도, 단위시간당 처리하는 태스크의 개수인 스루풋(throughput)을 측정하여 적정 스레드 수를 결정하는 방식도 고려할 수 있으나, 스루풋을 측정하는 감시자 스레드도 하나의 스레드이므로 태스크가 몰려오는 상황에서는 빠르게 스루풋을 측정하는게 어려운 문제가 있다.
따라서, 실시간으로 빠르게 변화하는 웹 환경에서 최적의 스레드 풀의 사이즈를 동적으로 결정하여 시스템 효율성을 높일 수 있는 기술 방안이 요청된다.
본 발명은 상술한 문제점들을 모두 해결하는 것을 그 목적으로 한다.
또한, 본 발명은 실시간으로 빠르게 변화하는 웹 환경에서 최적의 스레드 풀의 사이즈를 동적으로 결정하여 시스템 효율성을 높일 수 있는 기술 방안을 제공하는 것을 다른 목적으로 한다.
또한, 본 발명은 작업 큐의 사이즈의 변화를 실시간으로 참조하여 적정 최대 스레드 값을 결정함으로써 스레드 개수가 과도하게 많은 경우 스레드 스케줄링으로 인해 발생되는 오버헤드를 줄이고 스레드 개수가 부족함으로 인해 운영체제 내에서 작업이 대기하는 시간이 늘어나는 문제를 해결하는 것을 또 다른 목적으로 한다.
상기 목적을 달성하기 위한 본 발명의 대표적인 구성은 다음과 같다.
본 발명의 일 태양에 따르면, 스레드 풀(thread pool)의 사이즈를 동적으로 관리하는 방법에 있어서, (a) 상기 스레드 풀에 포함된 스레드의 수가 현재 설정되어 있는 최대 스레드 값에 소정의 범위 내로 근접하면, 프로세서가, 상기 현재 설정되어 있는 최대 스레드 값을 증가시키는 단계, 및 (b) 상기 프로세서가, 작업 큐의 사이즈에 대한 정보를 참조로 하여, 상기 최대 스레드 값이 증가하기 이전의 작업 큐의 사이즈와 상기 최대 스레드 값이 증가한 이후의 작업 큐의 사이즈를 비교하고, 상기 최대 스레드 값이 증가한 이후의 작업 큐의 사이즈가 상기 최대 스레드 값이 증가하기 이전의 작업 큐의 사이즈보다 크거나 같을 경우, 상기 최대 스레드 값을 다시 증가시키는 단계를 포함하는 방법이 제공된다.
본 발명의 다른 태양에 따르면, 스레드 풀(thread pool)의 사이즈를 동적으로 관리하는 서버에 있어서, 프로세서, 작업 요청을 획득하는 통신부, 및 작업 큐의 사이즈 및 스레드 풀에 설정되어 있는 최대 스레드 값을 저장하는 메모리를 포함하되, 상기 프로세서는, (i) 상기 스레드 풀에 포함된 스레드의 수가 현재 설정되어 있는 최대 스레드 값에 소정의 범위 내로 근접하면, 상기 현재 설정되어 있는 최대 스레드 값을 증가시켜 상기 메모리에 저장하고, (ii) 상기 메모리에 저장된 작업 큐의 사이즈에 대한 정보를 참조로 하여, 상기 최대 스레드 값이 증가하기 이전의 작업 큐의 사이즈와 상기 최대 스레드 값이 증가한 이후의 작업 큐의 사이즈를 비교하고, 상기 최대 스레드 값이 증가한 이후의 작업 큐의 사이즈가 상기 최대 스레드 값이 증가하기 이전의 작업 큐의 사이즈보다 크거나 같을 경우, 상기 최대 스레드 값을 다시 증가시켜 상기 메모리에 저장하는, 서버가 제공된다.
이 외에도, 본 발명을 구현하기 위한 다른 방법, 장치 및 상기 방법을 실행하기 위한 컴퓨터 프로그램을 기록하기 위한 컴퓨터 판독 가능한 기록 매체가 더 제공된다.
본 발명에 의하면, 다음과 같은 효과가 있다.
본 발명은 실시간으로 빠르게 변화하는 웹 환경에서 최적의 스레드 풀의 사이즈를 동적으로 결정하여 시스템 효율성을 높일 수 있는 효과가 있다.
또한, 본 발명은 작업 큐의 사이즈의 변화를 실시간으로 참조하여 적정 최대 스레드 값을 결정함으로써, 스레드 개수가 과도하게 많은 경우 스레드 스케줄링으로 인해 발생되는 오버헤드를 줄이고 스레드 개수가 부족함으로 인해 운영체제 내에서 작업이 대기하는 시간이 늘어나는 문제를 해결하는 효과가 있다.
도 1은 본 발명의 일 실시예에 따른 서버가 스레드 풀의 사이즈를 동적으로 관리하는 방법을 개략적으로 설명하기 위한 개념도이다.
도 2는 상기 본 발명의 일 실시예에 따른 서버의 블록도이다.
도 3은 작업 큐의 사이즈가 증가하는 경우에 스레드 풀의 최대 스레드 값을 증가시키는 실시예를 설명하기 위한 도면이다.
도 4는 최대 스레드 값을 늘렸음에도 시스템 과부하로 인해 스레드 풀에 포함된 스레드의 개수가 증가하지 못하는 경우 최대 스레드 값의 증가를 중지시키는 실시예를 설명하기 위한 도면이다.
도 5는 작업 큐의 사이즈가 감소하는 경우에 스레드 풀의 최대 스레드 값의 증가를 중지시키거나 감소시키는 실시예를 설명하기 위한 도면이다.
도 6은 작업 큐의 사이즈의 증감 정도에 따라 최대 스레드 값의 증감 정도를 결정하는 실시예를 도시한 도면이다.
후술하는 본 발명에 대한 상세한 설명은, 본 발명이 실시될 수 있는 특정 실시예를 예시로서 도시하는 첨부 도면을 참조한다. 이들 실시예는 당업자가 본 발명을 실시할 수 있기에 충분하도록 상세히 설명된다. 본 발명의 다양한 실시예는 서로 다르지만 상호 배타적일 필요는 없음이 이해되어야 한다. 예를 들어, 여기에 기재되어 있는 특정 형상, 구조 및 특성은 일 실시예에 관련하여 본 발명의 정신 및 범위를 벗어나지 않으면서 다른 실시예로 구현될 수 있다. 또한, 각각의 개시된 실시예 내의 개별 구성요소의 위치 또는 배치는 본 발명의 정신 및 범위를 벗어나지 않으면서 변경될 수 있음이 이해되어야 한다. 따라서, 후술하는 상세한 설명은 한정적인 의미로서 취하려는 것이 아니며, 본 발명의 범위는, 적절하게 설명된다면, 그 청구항들이 주장하는 것과 균등한 모든 범위와 더불어 첨부된 청구항에 의해서만 한정된다. 도면에서 유사한 참조부호는 여러 측면에 걸쳐서 동일하거나 유사한 기능을 지칭한다.
도 1은 본 발명의 일 실시예에 따른 서버가 스레드 풀의 사이즈를 동적으로 관리하는 방법을 개략적으로 설명하기 위한 개념도이다.
먼저 도 1을 참조하면, 본 발명의 일 실시예에 따른 서버(100)의 운영체제는 프로그램을 실행하기 위한 적어도 하나의 프로세스를 관리하고 각 프로세스는 적어도 하나의 작업(21, 22, 23)을 포함하는 작업 큐(20), 적어도 하나의 워커 스레드(가령, 31, 32, 33, 34)를 포함하는 스레드 풀(30)을 포함하고 있음을 알 수 있다. 운영체제는 적어도 하나의 워커 스레드(31, 32, 33, 34) 각각에 복수의 작업 중 적어도 하나를 할당하여 실행되도록 한다.
스레드 풀(30)에 대해 설정된 최대 스레드 값 이하의 스레드가 생성되어 스레드 풀(30)에 포함되고, 운영체제는 작업 큐(20)에서 작업을 꺼내어 스레드 풀(30)에 포함된 워커 스레드에 할당한다. 작업이 끝난 스레드는 폐기되지 않고 스레드 풀에서 다음 작업을 할당받을 때까지 대기할 수 있다.
스레드 풀(30)에는 보유할 수 있는 최대의 스레드 수를 나타내는 최대 스레드 값 및 보유할 수 있는 최소의 스레드 수를 나타내는 최소 스레드 값이 설정되어 있을 수 있다.
그런데, 실시간으로 빠르게 변화하는 웹 환경에서는 적절한 최소 스레드 개수나 최대 스레드 개수를 결정하는게 쉽지 않은 바, 본 발명의 일 실시예에 따른 서버는 다음의 방법으로 최대 스레드 개수를 실시간으로 조정한다.
본 발명의 일 실시예에 따른 서버의 운영체제는 감시자 스레드(surveillance thread 40)를 두고, 감시자 스레드(40)가 작업 큐(20)와 스레드 풀(30)의 상황을 실시간으로 체크하여 스레드 풀(30)의 최대 스레드 값을 조정하는 기능을 수행할 수 있다. 참고로, 도 1에서는 감시자 스레드(40)가 스레드 풀(30)에 포함되지 않은 것으로 도시하였지만, 반드시 이에 한정되는 것은 아닐 것이다.
구체적으로, 감시자 스레드(40)는 스레드 풀(30)에 포함된 스레드의 수가 현재 설정되어 있는 최대 스레드 값에 소정의 범위 내로 근접하는지 모니터링할 수 있다. 그리고, 스레드 풀(30)에 포함된 스레드의 수가 소정의 범위 내로 근접하면, 감시자 스레드(40)는 상기 현재 설정되어 있는 최대 스레드 값을 천천히 증가시킬 수 있다. 이 경우에는 몰려오는 작업을 효율적으로 처리하기 위해 현재의 스레드의 수가 부족할 수 있으므로 최대 스레드 값을 천천히 증가시켜 현재의 스레드 수를 늘려주기 위한 것이다.
이때, 최대 스레드 값을 천천히 증가시키는 이유는 각 스레드에 할당되는 개별 작업의 CPU 사용량을 알 수 없기 때문이다. 하나의 작업 요청에는 I/O나 네트워크 사용 등으로 인해 CPU를 사용하지 않는 idle time이 있고 실제로 CPU를 사용해서 계산 작업을 하는 work time이 있다. idle time이 긴 작업이 많이 들어오는 경우는 최대 스레드 값을 늘려줘서 더 많은 스레드를 생성해야 한다. 다만, 한번에 최대 스레드 값을 많이 늘려서 스레드를 많이 생성하게 되면 문맥 교환(context switching) 때문에 시스템 성능에 안 좋은 영향을 미칠 수 있으므로 최대 스레드 값을 천천히 증가시키는 것이 시스템 안정성을 확보하면서도 최대의 성능을 이끌어낼 수 있는 방법이 된다. 그리고 이는 idle time이 짧고 work time이 긴 작업이 많이 들어오는 경우도 마찬가지이다. "천천히 증가시킨다"는 개념에 대해서는 추후 보다 자세히 설명될 것이다.
한편, 감시자 스레드(40)는 최대 스레드 값을 증가시킨 후에도 작업 큐의 사이즈가 기존과 대비하여 일정하거나 증가하는지를 관찰할 수 있다. 관찰 결과 작업 큐의 사이즈가 기존에 비해 일정하거나 증가하는 경우에는 서버에 서비스 요청이 몰려오는 경우라고 판단할 수 있으므로 다시 최대 스레드 값을 증가시킬 수 있다. 반면, 작업 큐(20)의 사이즈가 줄어드는 경우는 현재의 스레드 풀(20)의 최대 스레드 값이 적정하거나 과하다는 의미이므로 더 이상 최대 스레드 값을 늘리지 않거나 최대 스레드 값을 감소시킬 수 있다.
큐잉 이론(Queueing Theory)에 따르면 단위 시간 당 들어오는 요청의 수보다 1개의 스레드에서 처리 가능한 요청 수에 스레드의 수를 곱한 값이 더 큰 경우에 시스템이 안정하다고 판단하게 된다. 만약 반대의 경우가 되면 시스템에 들어오는 요청의 수가 처리되어 나가는 요청의 수보다 많아지게 되어 균형이 깨어진다. 이런 경우에는 최대 스레드 값을 늘려 처리 하는 요청의 수를 늘려야 한다.
균형 상태인지를 판단하기 위해서 들어오는 요청의 수와 나가는 요청의 수를 체크할 수도 있으나, 이 두 가지를 측정하기 위해서는 각각의 스레드가 작업을 시작하거나 끝낼 때마다 스레드 풀(30) 전체에서 관리하는 하나의 필드에 락을 걸고 접근해야 하므로 시스템의 성능에 악영향을 미친다. 작업이 작업 큐(20)에서 대기한 시간이나 스레드가 작업을 처리한 시간을 측정할 수도 있으나 요청의 수를 체크하는 경우와 동일한 이유로 시스템 성능이 떨어진다. 반면, 본 발명과 같이 작업 큐(20)의 사이즈를 측정할 때 락을 걸 필요가 없는 작업 큐(20)를 사용하는 경우 작업 큐(20)의 사이즈 측정 시에 시스템에 영향을 주지 않으므로 전술한 방법에 비해 시스템 성능을 높일 수 있다.
이처럼 본 발명의 일 실시예에 따른 서버(100)의 운영체제는 감시자 스레드(40)를 통해 작업 큐(20)의 사이즈 및 스레드 풀(30)에 포함된 스레드의 수를 실시간으로 관찰하면서 최대 스레드 값을 최적으로 조정할 수 있다.
이하에서는 상기 서버의 구성 및 동작을 좀더 구체적으로 설명한다.
도 2는 상기 본 발명의 일 실시예에 따른 서버의 블록도이다.
도 2를 참조하면, 본 발명의 일 실시예에 따른 스레드 풀의 사이즈를 동적으로 관리하는 서버(100)는 통신부(110), 프로세서(120), 메모리(130)를 포함할 수 있다.
여기서, 본 발명의 일 실시예에 따른 스레드 풀의 사이즈를 동적으로 관리하는 서버(100)는 디지털 기기로서, 메모리를 구비하고 프로세서를 탑재하여 연산 능력을 갖춘 디지털 기기라면 얼마든지 본 발명에 따른 서버로서 채택될 수 있다. 특히, 상기 서버(100)는 클라이언트 단말의 요청에 응답하여 서비스를 제공하는 웹 서버로 구현될 수 있다.
통신부(110)는 작업 요청을 획득하는 구성이다. 예를 들어, 클라이언트로부터 HTTP 요청이 있는 경우 통신부(110)는 이러한 작업 요청을 획득할 수 있다.
프로세서(120)는, 본 발명의 일 실시예에 따른 서버(100)의 동작 전반을 제어한다. 특히, 프로세서(120)는 상기 서버(100)의 운영체제에서 전술한 감시자 스레드(40)를 동작시킨다. (i) 구체적으로 프로세서(120)는 감시자 스레드(40)로 하여금 스레드 풀(30)에 포함된 스레드의 수가 현재 설정되어 있는 최대 스레드 값에 소정의 범위 내로 근접하는지 판단하도록 하고, 소정의 범위 내로 근접하는 경우, 현재 설정되어 있는 최대 스레드 값을 증가시켜 후술할 메모리(130)에 저장할 수 있다(소위 1차 증가).
예를 들어, 현재 설정되어 있는 최대 스레드 값이 100개라고 할 때, 프로세서(120)는 감시자 스레드(40)로 하여금 작업을 할당받은 스레드를 포함하는 스레드 풀(30)의 스레드의 개수가 최대 스레드 값의 99%인 99개 이상이 되는지 살펴보도록 할 수 있다. 만일 스레드 풀(30)의 스레드의 개수가 99개 이상이라면, 프로세서(120)는 감시자 스레드(40)로 하여금 현재 설정되어 있는 최대 스레드 값을 120개로 증가시켜 증가된 최대 스레드 값의 상태를 메모리(130)에 저장하도록 할 수 있다.
이처럼 프로세서(120)는, 스레드 풀(30)에 포함된 스레드의 수가 최대 스레드 값과 동일하지 않은 경우라도 소정의 범위 내로 근접하면 감시자 스레드(40)로 하여금 최대 스레드 값을 증가시키도록 하여 스레드 수가 포화 상태가 되는 것을 예방할 수 있다.
물론, 프로세서(120)는, 스레드 풀(30)에 포함된 스레드의 수가 현재 설정되어 있는 최대 스레드 값과 동일한 경우, 감시자 스레드(40)로 하여금 현재 설정되어 있는 최대 스레드 값을 증가시켜 메모리(130)에 저장하도록 할 수도 있다.
이후, 프로세서(120)는 감시자 스레드(40)로 하여금 메모리(130)에 저장된 작업 큐(20)의 사이즈에 대한 정보를 참조로 하여, 최대 스레드 값이 증가하기 이전의 작업 큐(20)의 사이즈와 최대 스레드 값이 증가한 이후의 작업 큐(20)의 사이즈를 비교하도록 할 수 있다. 그리고, 최대 스레드 값이 증가한 이후의 작업 큐(20)의 사이즈가 상기 최대 스레드 값이 증가하기 이전의 작업 큐(20)의 사이즈보다 크거나 같을 경우, 프로세서(120)는 감시자 스레드(40)로 하여금 최대 스레드 값을 다시 증가시켜 메모리(130)에 저장하도록 할 수 있다(소위 2차 증가). 이 경우에는 최대 스레드 값이 증가하였음에도 작업 큐(20)의 사이즈가 종전과 동일하게 유지되거나 증가된 것에 비추어 몰려오는 작업을 수행하기에는 현재의 스레드 수가 부족하다고 판단되므로 최대 스레드 값을 다시 증가시키는 것이다. 최대 스레드 값이 증가되었음에도 작업 큐(20)의 사이즈에 변화가 없는 경우는 최대 스레드 값의 증가로 새로운 스레드가 생성되어 작업 큐(20)의 작업이 할당되었음에도 작업 큐(20)의 사이즈가 변화가 없는 경우로서, 현재의 스레드 수가 몰려오는 작업량을 감소시킬 정도로 충분하지 않은 상황으로 볼 수 있으므로 작업 큐(20)의 사이즈가 증가한 경우에 준해서 처리할 수도 있다.
한편, 상기 1차 증가 및 상기 2차 증가 각각에서 증가되는 최대 스레드 값의 수치는 서로 다르게 설정될 수 있다. 예를 들어, 처음에 스레드의 수가 최대 스레드 값에 소정의 범위 내로 근접하는 경우는 작업이 몰려오기 시작하는 상황으로 볼 수 있으므로 최대 스레드 값을 비교적 큰 폭으로 증가시키고, 일단 최대 스레드 값을 증가시킨 후 작업 큐(20)의 사이즈가 증가되어 다시 최대 스레드 값을 증가시키는 경우는 작업의 수의 증감에 세밀하게 대응해야 하므로 최대 스레드 값을 상대적으로 적은 폭으로 증가시킬 수 있다. 물론, 이와는 달리 다양한 변형예를 상정할 수도 있을 것이다.
여기서, 프로세서(120)는, 감시자 스레드(40)가 작업 큐(20)의 사이즈를 참조함에 있어서 락(lock)을 잡지 않은 상태로 작업 큐(20)의 사이즈를 참조하도록 할 수 있다. 즉, 프로세서(120)는 감시자 스레드(40)가 작업 큐(20)의 사이즈를 락 동작 없이 스냅샷으로 획득하도록 할 수 있어 시스템 성능을 떨어뜨리지 않으면서 최대 스레드 값을 조정할 수 있게 된다.
한편, 최대 스레드 값이 증가된 후, 프로세서(120)는 증가된 최대 스레드 값을 시스템이 반영할 수 있도록 기설정된 시간만큼 기다렸다가 최대 스레드 값 조정을 수행할 수 있다. 구체적으로, 프로세서(120)는 감시자 스레드(40)가 작업 큐(20)의 사이즈의 증감을 판단하기 위해 기설정된 시간 간격(예를 들어, 0.1초)으로 작업 큐(20)의 사이즈를 스냅샷으로 획득하도록 할 수 있는데, 최대 스레드 값을 조정한 후에는 감시자 스레드(40)가 작업 큐(20)의 사이즈를 스냅샷으로 획득하여도 작업 큐(20)의 사이즈의 증감을 판단하지 않거나 최대 스레드 값 조정을 하지 않고 소정의 시간만큼 대기함으로써 증가된 최대 스레드 값이 시스템에 반영되도록 할 수 있다.
위와 같은 방법으로 최대 스레드 값이 증가되면, 프로세서(120)는, 최대 스레드 값이 증가된 분만큼 새로운 스레드를 생성하여 스레드 풀(30)에 넣는다. 그리고, 프로세서(120)는 작업 큐(20)에서 새로운 작업을 획득하여 상기 생성된 새로운 스레드에 할당할 수 있다.
상술한 예에서 설명하면, 프로세서(120)는 감시자 스레드(40)로 하여금 현재 설정되어 있는 최대 스레드 값을 120으로 증가시킨 경우, 최대 스레드 값이 100일 때의 작업 큐(20)의 사이즈와 최대 스레드 값이 120으로 증가한 이후의 작업 큐(20)의 사이즈를 비교하도록 할 수 있다. 그리고, 감시자 스레드(40)로 하여금 최대 스레드 값이 120이 된 이후의 작업 큐(20)의 사이즈가 최대 스레드 값이 100일 때의 작업 큐(20)의 사이즈보다 크거나 같으면 최대 스레드 값을 다시 140으로 증가시켜 메모리(130)에 저장하도록 할 수 있다. 이러한 경우는 최대 스레드 값이 120으로 설정되어 스레드 수가 증가하였음에도 불구하고 작업 큐(20)에 포함되어 있는 작업의 수가 줄어들지 않았으므로 더 많은 스레드가 필요하다고 판단되기 때문이다.
도 3은 작업 큐의 사이즈가 증가하는 경우에 스레드 풀의 최대 스레드 값을 증가시키는 실시예를 설명하기 위한 도면이다.
도 3의 (a)를 참조하면 최초 작업 큐(20)에는 5개의 작업(21, 22, 23, 24, 25)이 있다고 가정한다. 스레드 풀(30)에 포함된 스레드의 수가 4개이고 현재 설정되어 있는 최대 스레드 값(max)이 4인 경우 스레드 풀(30)에 포함된 스레드의 수가 최대 스레드 값(max)에 소정의 범위 내로 근접했다고 판단될 수 있다. 그리고, 프로세서(120)는 도 3의 (a)와 같이 감시자 스레드(40)로 하여금 현재 설정되어 있는 최대 스레드 값(max)을 2 증가시켜 6으로 설정하도록 하고 새로운 스레드(35, 36)을 생성할 수 있다.
도 3의 (a)에서 최대 스레드 값(max)이 증가하기 이전의 작업 큐(20)의 사이즈가 5인데 도 3의 (b)에서 최대 스레드 값(max)이 증가한 이후의 작업 큐(20)의 사이즈가 6으로 증가했으므로, 프로세서(120)는 감시자 스레드(40)로 하여금 최대 스레드 값(max)을 다시 1 증가시키도록 하고 새로운 스레드(37)을 생성할 수 있다.
한편, 프로세서(120)는, 상기에서 최대 스레드 값이 증가한 이후의 작업 큐(20)의 사이즈가 최대 스레드 값이 증가하기 이전의 작업 큐(20)의 사이즈보다 크거나 같더라도, 스레드 풀(30)에 포함된 스레드의 수가 해당 시점에서의 최대 스레드 값보다 적으면, 감시자 스레드(40)로 하여금 스레드 풀(30)의 최대 스레드 값에 대한 증가를 중지하도록 할 수 있다. 이런 경우는 시스템이 감당하지 못할 정도의 요청이 계속해서 들어와서 프로세서(120)가 최대 스레드 값을 늘렸음에도 스레드 수를 늘리지 못할 정도로 서버(100)에 과부하가 걸려있다고 판단되므로 최대 스레드 값에 대한 증가를 중지시키는 것이다.
이와 유사하게 프로세서(120)는, 최대 스레드 값을 다시 증가시켰음에도 스레드 풀(30)에 포함된 스레드의 수가 상기 다시 증가된 최대 스레드 값에 소정의 범위 내로 근접하지 못할 경우, 감시자 스레드(40)로 하여금 최대 스레드 값에 대한 증가를 중지하도록 할 수 있다.
또한, 프로세서(120)는, 최대 스레드 값이 조정된 후에는 조정된 최대 스레드 값이 시스템에 반영되도록 기 설정된 시간을 기다린 후, 작업 큐(20)의 사이즈의 증감 여부 및 스레드 풀(30)에 포함된 스레드 수가 최대 스레드 값에 소정의 범위 내로 근접하는지 여부 중 적어도 하나를 판단할 수 있다. 최대 스레드 값이 조정되고 기 설정된 시간을 기다린 후, 스레드 풀(30)에 포함된 스레드 수가 최대 스레드 값에 소정의 범위 내로 근접하지 못하는 경우 프로세서(120)는 감시자 스레드(40)로 하여금 최대 스레드 값에 대한 증가를 중지하도록 할 수 있다. 이때는 전술한 경우와 마찬가지로 과부하로 볼 수 있기 때문이다.
도 4는 최대 스레드 값을 늘렸음에도 시스템 과부하로 인해 스레드 풀에 포함된 스레드의 개수가 증가하지 못하는 경우 최대 스레드 값의 증가를 중지시키는 실시예를 설명하기 위한 도면이다.
도 4의 (a)를 참조하면, 작업 큐(20)의 사이즈가 증가하여 프로세서(120)가 최대 스레드 값(max)을 6으로 증가시킨 상황에서 스레드 풀(30)에 포함된 스레드의 수가 최대 스레드 값(max)인 6에 근접하지 못하고 4에 머물러 있으므로 프로세서(120)는 감시자 스레드(40)로 하여금 최대 스레드 값(max)에 대한 증가를 중지하도록 할 수 있다. 도 4의 (b)에서는 스레드 풀(30)에 새로운 스레드(35)가 생성되었으나, 최대 스레드 값(max)의 증가는 중지되었으므로 여전히 최대 스레드 값은 6임을 알 수 있다.
또한, 최대 스레드 값이 증가된 후 기설정된 시간이 지나고 작업 큐(20)의 사이즈가 감소되면 프로세서(120)는 감시자 스레드(40)로 하여금 최대 스레드 값의 증가를 중지하도록 할 수 있다. 이 경우에는 작업 큐(20)에 대기 중인 작업들이 늘어난 스레드에 의해 처리되고 있다고 볼 수 있기 때문이다.
또한, 최대 스레드 값의 증가가 중지된 후 기설정된 시간이 지나고 스레드 풀(30)에 포함된 스레드의 수가 최대 스레드 값에서 소정 범위 밖으로 벗어나면, 프로세서(120)는 감시자 스레드(40)로 하여금 최대 스레드 값을 감소시키도록 할 수 있다. 최대 스레드 값이 증가하지 않음에도 스레드 풀(30)에 포함된 스레드의 수가 최대 스레드 값에서 소정 범위 밖으로 줄어드는 경우 현재의 스레드 수가 작업을 처리하는데 여유가 있다는 의미이므로 최대 스레드 값을 감소시키는 것이다.
또한, 최대 스레드 값을 감소시킨 이후에도 작업 큐의 사이즈가 증가하지 않거나 스레드 풀(30)에 포함된 스레드의 수가 최대 스레드 값에서 소정 범위 밖에 놓이게 되면, 프로세서(120)는 감시자 스레드(40)로 하여금 최대 스레드 값을 계속해서 감소시키도록 할 수 있다.
도 5는 작업 큐의 사이즈가 감소하는 경우에 스레드 풀의 최대 스레드 값의 증가를 중지시키거나 감소시키는 실시예를 설명하기 위한 도면이다.
도 5의 (a)는 상술한 도 3의 (b)에서 최대 스레드 값(max)을 7로 증가시킨 후 작업 큐(20)와 스레드 풀(30)의 상황을 도시하고 있다. 도 3의 (b)에서 작업 큐(20)에는 6개의 작업(21, 22, 23, 24, 25, 26)이 있었으나 도 5의 (a)와 같이 두 개의 작업(21, 22)이 스레드(36, 37)에 할당되어 작업 큐(20)에서 삭제되었음을 알 수 있다. 이처럼 작업 큐(20)의 사이즈가 최대 스레드 값(max)을 조정한 이후로 감소되었으므로 프로세서(120)는 감시자 스레드(40)로 하여금 최대 스레드 값(max)을 증가시키는 것을 중지하도록 할 수 있다. 도 5의 (b)와 같이 최대 스레드 값(max)의 증가가 중지된 후 스레드 풀(30)에 포함된 스레드의 수가 최대 스레드 값(max)인 7에서 소정 범위 밖인 5이하로 줄어들면, 프로세서(120)는 감시자 스레드(40)로 하여금 최대 스레드 값(max)을 1 감소하도록 할 수 있다.
한편, 상기 증감되는 최대 스레드 값은 CPU 코어의 개수를 참조로 하여 결정될 수 있다. 일 실시예로, 최대 스레드 값은 스레드 풀(30)에 포함된 전체 스레드 개수를 참조로 하여 CPU 코어의 개수의 n 배씩 증감될 수 있다(참고로, n은 정수일 수도 있지만, 1/2 등과 같이 분수일 수도 있음). 예를 들어, CPU 코어의 개수가 4개일 때, 스레드 풀(30)에 포함된 전체 스레드 개수가 100개라면, 최대 스레드 값은 4씩 증감되고 스레드 풀(30)에 포함된 전체 스레드 개수가 200개라면, 최대 스레드 값은 8씩 증감될 수 있다. 다만, 증감되는 최대 스레드 값이 CPU 코어의 개수를 참조로 하여 결정되는 것은 일 실시예에 불과하며 이와 다른 방식으로 증감되는 최대 스레드 값이 결정될 수도 있다.
도 6은 작업 큐의 사이즈의 증감 정도에 따라 최대 스레드 값의 증감 정도를 결정하는 실시예를 도시한 도면이다.
전술한 실시예에서 최대 스레드 값의 증감분은, 최대 스레드 값이 증감한 이후의 작업 큐(20)의 사이즈가 최대 스레드 값이 증감되기 이전의 작업 큐(20)의 사이즈보다 크거나 작은 정도를 참조로 하여 결정될 수 있다.
도 6의 (a)를 참조하면, 작업 큐(20)의 사이즈는 5이고 최대 스레드 값은 5로 증가한 상태이며 스레드 풀(30)에는 5개의 스레드가 포함되어 있는 상황이다. 도 6의 (a)의 상태로부터 도 6의 (b)의 상태로 변하는 바와 같이 작업 큐(20)의 사이즈가 5에서 6으로 증가된 경우 전술한 것처럼 프로세서(120)는 감시자 스레드(40)로 하여금 최대 스레드 값을 6으로 증가시키도록 할 수 있다. 그런데, 도 6의 (a)의 상태로부터 도 6의 (c)의 상태로 변하는 바와 같이 작업 큐(20)의 사이즈가 5에서 7로 증가된 경우는 프로세서(120)는 감시자 스레드(40)로 하여금 최대 스레드 값을 7로 증가시키도록 할 수 있다. 이처럼 최대 스레드 값의 증감분은 최대 스레드 값이 증감된 전후의 작업 큐(20)의 사이즈의 증감 정도에 따라 달라질 수 있다.
한편, 전술한 본 발명의 프로세서(120)는 멀티 코어를 포함하고 멀티 코어를 통해 감시자 스레드(40) 및 복수의 워커 스레드 각각을 실행할 수 있다. 이 경우 멀티 코어 중 하나는 감시자 스레드(40)를 동작시키고 나머지 코어는 워커 스레드를 동작시킬 수 있고, 여러 코어가 번갈아 가면서 감시자 스레드(40) 또는 워커 스레드를 동작시키도록 구현될 수도 있다. 또한, 하나의 코어가 감시자 스레드(40)와 워커 스레드를 번갈아가면서 동작시키도록 구현되는 것도 가능하다.
다시 도 2를 참조하면, 본 발명의 일 실시예에 따른 스레드 풀의 사이즈를 동적으로 관리하는 서버(100)의 메모리(130)는, 스레드 풀의 사이즈를 동적으로 관리하기 위해 필요한 각종 데이터를 저장할 수 있다. 우선, 작업 큐(20)는 메모리 상에 위치할 수 있고 작업에 대한 데이터의 포인터를 저장할 수 있다. 또한, 메모리(130)는 스레드의 데이터를 저장하고 스레드 문맥 교환(context switching)에 이용되기도 한다. 또한, 메모리는 작업 큐(20)의 사이즈, 스레드 풀(30)에 설정되어 있는 최대 스레드 값, 최소 스레드 값을 저장할 수 있다.
또한, 이상 설명된 본 발명에 따른 실시예들은 다양한 컴퓨터 구성요소를 통하여 수행될 수 있는 프로그램 명령어의 형태로 구현되어 컴퓨터 판독 가능한 기록 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능한 기록 매체는 프로그램 명령어, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 컴퓨터 판독 가능한 기록 매체에 기록되는 프로그램 명령어는 본 발명을 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 분야의 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능한 기록 매체의 예에는, 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체, CD-ROM, DVD와 같은 광기록 매체, 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 ROM, RAM, 플래시 메모리 등과 같은 프로그램 명령어를 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령어의 예에는, 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드도 포함된다. 상기 하드웨어 장치는 본 발명에 따른 처리를 수행하기 위해 하나 이상의 소프트웨어 모듈로서 작동하도록 구성될 수 있으며, 그 역도 마찬가지이다.
이상에서 본 발명이 구체적인 구성요소 등과 같은 특정 사항들과 한정된 실시예 및 도면에 의해 설명되었으나, 이는 본 발명의 보다 전반적인 이해를 돕기 위해서 제공된 것일 뿐, 본 발명이 상기 실시예들에 한정되는 것은 아니며, 본 발명이 속하는 기술분야에서 통상적인 지식을 가진 자라면 이러한 기재로부터 다양한 수정 및 변형을 꾀할 수 있다.
따라서, 본 발명의 사상은 상기 설명된 실시예에 국한되어 정해져서는 아니 되며, 후술하는 특허청구범위뿐만 아니라 이 특허청구범위와 균등하게 또는 등가적으로 변형된 모든 것들은 본 발명의 사상의 범주에 속한다고 할 것이다.
100 : 서버
110 : 통신부
120 : 프로세서
130 : 메모리
20 : 작업 큐
30 : 스레드 풀
40: 감시자 스레드

Claims (23)

  1. 스레드 풀(thread pool)의 사이즈를 동적으로 관리하는 방법에 있어서,
    (a) 상기 스레드 풀에 포함된 스레드의 수가 현재 설정되어 있는 최대 스레드 값에 소정의 범위 내로 근접하면, 프로세서가, 상기 현재 설정되어 있는 최대 스레드 값을 증가시키는 단계,
    (b) 상기 프로세서가, 작업 큐의 사이즈에 대한 정보를 참조로 하여, 상기 최대 스레드 값이 증가하기 이전의 작업 큐의 사이즈와 상기 최대 스레드 값이 증가한 이후의 작업 큐의 사이즈를 비교하고, 상기 최대 스레드 값이 증가한 이후의 작업 큐의 사이즈가 상기 최대 스레드 값이 증가하기 이전의 작업 큐의 사이즈보다 크거나 같을 경우, 상기 최대 스레드 값을 다시 증가시키는 단계, 및
    (c) 상기 (b) 단계 이후에 상기 작업 큐의 사이즈가 감소하거나 상기 (b) 단계에서 상기 최대 스레드 값을 다시 증가시켰음에도 상기 스레드 풀에 포함된 스레드의 수가 상기 (b) 단계에 의해 산출된 상기 최대 스레드 값에 소정의 범위 내로 근접하지 못할 경우 상기 최대 스레드 값에 대한 증가를 중지하는 단계를 포함하는 방법.
  2. 제1항에 있어서,
    상기 (a) 단계는,
    (a1) 상기 프로세서가, 상기 최대 스레드 값이 증가된 분만큼 새로운 스레드를 생성하여 상기 스레드 풀에 넣는 단계, 및
    (a2) 상기 프로세서가, 상기 작업 큐에서 새로운 작업을 획득하여 상기 생성된 새로운 스레드에 할당하는 단계를 포함하는 것을 특징으로 하는 방법.
  3. 제1항에 있어서,
    상기 (b) 단계에 있어서,
    상기 최대 스레드 값이 증가한 이후의 작업 큐의 사이즈가 상기 최대 스레드 값이 증가하기 이전의 작업 큐의 사이즈보다 크거나 같더라도, 상기 스레드 풀에 포함된 스레드의 수가 해당 시점에서의 최대 스레드 값보다 작으면, 상기 프로세서가, 상기 스레드 풀의 최대 스레드 값에 대한 증가를 중지하는 것을 특징으로 하는 방법.
  4. 삭제
  5. 제1항에 있어서,
    상기 (c) 단계에서,
    상기 (b) 단계 완료 후 기설정된 시간 이후에, 상기 작업 큐의 사이즈가 감소하거나 상기 (b) 단계에서 상기 최대 스레드 값을 다시 증가시켰음에도 상기 스레드 풀에 포함된 스레드의 수가 상기 (b) 단계에 의해 산출된 상기 최대 스레드 값에 소정의 범위 내로 근접하지 못할 경우 상기 최대 스레드 값에 대한 증가를 중지하는 것을 특징으로 하는 방법.
  6. 스레드 풀(thread pool)의 사이즈를 동적으로 관리하는 방법에 있어서,
    (a) 상기 스레드 풀에 포함된 스레드의 수가 현재 설정되어 있는 최대 스레드 값에 소정의 범위 내로 근접하면, 프로세서가, 상기 현재 설정되어 있는 최대 스레드 값을 증가시키는 단계, 및
    (b) 상기 프로세서가, 작업 큐의 사이즈에 대한 정보를 참조로 하여, 상기 최대 스레드 값이 증가하기 이전의 작업 큐의 사이즈와 상기 최대 스레드 값이 증가한 이후의 작업 큐의 사이즈를 비교하고, 상기 최대 스레드 값이 증가한 이후의 작업 큐의 사이즈가 상기 최대 스레드 값이 증가하기 이전의 작업 큐의 사이즈보다 크거나 같을 경우, 상기 최대 스레드 값을 다시 증가시키는 단계를 포함하고,
    상기 (a) 단계는,
    상기 스레드 풀에 포함된 스레드의 수가 상기 현재 설정되어 있는 최대 스레드 값과 동일한 경우라면, 상기 프로세서가, 상기 현재 설정되어 있는 최대 스레드 값을 증가시키는 것을 특징으로 하는 방법.
  7. 스레드 풀(thread pool)의 사이즈를 동적으로 관리하는 방법에 있어서,
    (a) 상기 스레드 풀에 포함된 스레드의 수가 현재 설정되어 있는 최대 스레드 값에 소정의 범위 내로 근접하면, 프로세서가, 상기 현재 설정되어 있는 최대 스레드 값을 증가시키는 단계, 및
    (b) 상기 프로세서가, 작업 큐의 사이즈에 대한 정보를 참조로 하여, 상기 최대 스레드 값이 증가하기 이전의 작업 큐의 사이즈와 상기 최대 스레드 값이 증가한 이후의 작업 큐의 사이즈를 비교하고, 상기 최대 스레드 값이 증가한 이후의 작업 큐의 사이즈가 상기 최대 스레드 값이 증가하기 이전의 작업 큐의 사이즈보다 크거나 같을 경우, 상기 최대 스레드 값을 다시 증가시키는 단계를 포함하고,
    상기 (b) 단계는,
    상기 프로세서가 상기 작업 큐의 사이즈를 참조함에 있어서 락(lock)을 잡지 않은 상태로 상기 작업 큐의 사이즈를 참조하는 것을 특징으로 하는 방법.
  8. 스레드 풀(thread pool)의 사이즈를 동적으로 관리하는 방법에 있어서,
    (a) 상기 스레드 풀에 포함된 스레드의 수가 현재 설정되어 있는 최대 스레드 값에 소정의 범위 내로 근접하면, 프로세서가, 상기 현재 설정되어 있는 최대 스레드 값을 증가시키는 단계, 및
    (b) 상기 프로세서가, 작업 큐의 사이즈에 대한 정보를 참조로 하여, 상기 최대 스레드 값이 증가하기 이전의 작업 큐의 사이즈와 상기 최대 스레드 값이 증가한 이후의 작업 큐의 사이즈를 비교하고, 상기 최대 스레드 값이 증가한 이후의 작업 큐의 사이즈가 상기 최대 스레드 값이 증가하기 이전의 작업 큐의 사이즈보다 크거나 같을 경우, 상기 최대 스레드 값을 다시 증가시키는 단계를 포함하고,
    상기 (a) 단계 및 상기 (b) 단계 각각에서 증가되는 최대 스레드 값은 CPU 코어의 개수를 참조로 하여 결정되는 것을 특징으로 하는 방법.
  9. 스레드 풀(thread pool)의 사이즈를 동적으로 관리하는 방법에 있어서,
    (a) 상기 스레드 풀에 포함된 스레드의 수가 현재 설정되어 있는 최대 스레드 값에 소정의 범위 내로 근접하면, 프로세서가, 상기 현재 설정되어 있는 최대 스레드 값을 증가시키는 단계, 및
    (b) 상기 프로세서가, 작업 큐의 사이즈에 대한 정보를 참조로 하여, 상기 최대 스레드 값이 증가하기 이전의 작업 큐의 사이즈와 상기 최대 스레드 값이 증가한 이후의 작업 큐의 사이즈를 비교하고, 상기 최대 스레드 값이 증가한 이후의 작업 큐의 사이즈가 상기 최대 스레드 값이 증가하기 이전의 작업 큐의 사이즈보다 크거나 같을 경우, 상기 최대 스레드 값을 다시 증가시키는 단계를 포함하고,
    상기 (a) 단계 및 상기 (b) 단계 각각에서 증가되는 최대 스레드 값은 서로 다르게 설정되는 것을 특징으로 하는 방법.
  10. 스레드 풀(thread pool)의 사이즈를 동적으로 관리하는 방법에 있어서,
    (a) 상기 스레드 풀에 포함된 스레드의 수가 현재 설정되어 있는 최대 스레드 값에 소정의 범위 내로 근접하면, 프로세서가, 상기 현재 설정되어 있는 최대 스레드 값을 증가시키는 단계, 및
    (b) 상기 프로세서가, 작업 큐의 사이즈에 대한 정보를 참조로 하여, 상기 최대 스레드 값이 증가하기 이전의 작업 큐의 사이즈와 상기 최대 스레드 값이 증가한 이후의 작업 큐의 사이즈를 비교하고, 상기 최대 스레드 값이 증가한 이후의 작업 큐의 사이즈가 상기 최대 스레드 값이 증가하기 이전의 작업 큐의 사이즈보다 크거나 같을 경우, 상기 최대 스레드 값을 다시 증가시키는 단계를 포함하고,
    상기 (b) 단계에서 최대 스레드 값의 증가분은, 상기 최대 스레드 값이 증가한 이후의 작업 큐의 사이즈가 상기 최대 스레드 값이 증가하기 이전의 작업 큐의 사이즈보다 큰 정도를 참조로 하여 결정되는 것을 특징으로 하는 방법.
  11. 스레드 풀(thread pool)의 사이즈를 동적으로 관리하는 방법에 있어서,
    (a) 상기 스레드 풀에 포함된 스레드의 수가 현재 설정되어 있는 최대 스레드 값에 소정의 범위 내로 근접하면, 프로세서가, 상기 현재 설정되어 있는 최대 스레드 값을 증가시키는 단계, 및
    (b) 상기 프로세서가, 작업 큐의 사이즈에 대한 정보를 참조로 하여, 상기 최대 스레드 값이 증가하기 이전의 작업 큐의 사이즈와 상기 최대 스레드 값이 증가한 이후의 작업 큐의 사이즈를 비교하고, 상기 최대 스레드 값이 증가한 이후의 작업 큐의 사이즈가 상기 최대 스레드 값이 증가하기 이전의 작업 큐의 사이즈보다 크거나 같을 경우, 상기 최대 스레드 값을 다시 증가시키는 단계를 포함하고,
    상기 (a) 단계는,
    상기 프로세서가 감시자 스레드로 하여금 상기 현재 설정되어 있는 최대 스레드 값을 증가시키도록 하는 것을 특징으로 하는 방법.
  12. 스레드 풀(thread pool)의 사이즈를 동적으로 관리하는 서버에 있어서,
    프로세서,
    작업 요청을 획득하는 통신부, 및
    작업 큐의 사이즈 및 스레드 풀에 설정되어 있는 최대 스레드 값을 저장하는 메모리를 포함하되,
    상기 프로세서는,
    (i) 상기 스레드 풀에 포함된 스레드의 수가 현재 설정되어 있는 최대 스레드 값에 소정의 범위 내로 근접하면, 상기 현재 설정되어 있는 최대 스레드 값을 증가시켜 상기 메모리에 저장하고,
    (ii) 상기 메모리에 저장된 작업 큐의 사이즈에 대한 정보를 참조로 하여, 상기 최대 스레드 값이 증가하기 이전의 작업 큐의 사이즈와 상기 최대 스레드 값이 증가한 이후의 작업 큐의 사이즈를 비교하고, 상기 최대 스레드 값이 증가한 이후의 작업 큐의 사이즈가 상기 최대 스레드 값이 증가하기 이전의 작업 큐의 사이즈보다 크거나 같을 경우, 상기 최대 스레드 값을 다시 증가시켜 상기 메모리에 저장하며,
    상기 작업 큐의 사이즈가 감소하거나 상기 (ii)에서 상기 최대 스레드 값을 다시 증가시켰음에도 상기 스레드 풀에 포함된 스레드의 수가 상기 다시 증가된 최대 스레드 값에 소정의 범위 내로 근접하지 못할 경우 상기 최대 스레드 값에 대한 증가를 중지하는 것을 특징으로 하는 서버.
  13. 제12항에 있어서,
    상기 프로세서는,
    상기 최대 스레드 값이 증가된 분만큼 새로운 스레드를 생성하여 상기 스레드 풀에 넣고, 상기 작업 큐에서 새로운 작업을 획득하여 상기 생성된 새로운 스레드에 할당하는 것을 특징으로 하는 서버.
  14. 제12항에 있어서,
    상기 프로세서는,
    상기 (ii)에서 상기 최대 스레드 값이 증가한 이후의 작업 큐의 사이즈가 상기 최대 스레드 값이 증가하기 이전의 작업 큐의 사이즈보다 크거나 같더라도, 상기 스레드 풀에 포함된 스레드의 수가 해당 시점에서의 최대 스레드 값보다 적으면, 상기 스레드 풀의 최대 스레드 값에 대한 증가를 중지하는 것을 특징으로 하는 서버.
  15. 삭제
  16. 제12항에 있어서,
    상기 프로세서는,
    상기 (ii)에서 상기 최대 스레드 값을 다시 증가시킨 후 기설정된 시간 이후에 상기 작업 큐의 사이즈가 감소하거나 상기 (ii)에서 상기 최대 스레드 값을 다시 증가시켰음에도 상기 스레드 풀에 포함된 스레드의 수가 상기 다시 증가된 최대 스레드 값에 소정의 범위 내로 근접하지 못할 경우 상기 최대 스레드 값에 대한 증가를 중지하는 것을 특징으로 하는 서버.
  17. 스레드 풀(thread pool)의 사이즈를 동적으로 관리하는 서버에 있어서,
    프로세서,
    작업 요청을 획득하는 통신부, 및
    작업 큐의 사이즈 및 스레드 풀에 설정되어 있는 최대 스레드 값을 저장하는 메모리를 포함하되,
    상기 프로세서는,
    (i) 상기 스레드 풀에 포함된 스레드의 수가 현재 설정되어 있는 최대 스레드 값에 소정의 범위 내로 근접하면, 상기 현재 설정되어 있는 최대 스레드 값을 증가시켜 상기 메모리에 저장하고,
    (ii) 상기 메모리에 저장된 작업 큐의 사이즈에 대한 정보를 참조로 하여, 상기 최대 스레드 값이 증가하기 이전의 작업 큐의 사이즈와 상기 최대 스레드 값이 증가한 이후의 작업 큐의 사이즈를 비교하고, 상기 최대 스레드 값이 증가한 이후의 작업 큐의 사이즈가 상기 최대 스레드 값이 증가하기 이전의 작업 큐의 사이즈보다 크거나 같을 경우, 상기 최대 스레드 값을 다시 증가시켜 상기 메모리에 저장하며,
    상기 스레드 풀에 포함된 스레드의 수가 상기 현재 설정되어 있는 최대 스레드 값과 동일한 경우라면, 상기 현재 설정되어 있는 최대 스레드 값을 증가시켜 상기 메모리에 저장하는 것을 특징으로 하는 서버.
  18. 스레드 풀(thread pool)의 사이즈를 동적으로 관리하는 서버에 있어서,
    프로세서,
    작업 요청을 획득하는 통신부, 및
    작업 큐의 사이즈 및 스레드 풀에 설정되어 있는 최대 스레드 값을 저장하는 메모리를 포함하되,
    상기 프로세서는,
    (i) 상기 스레드 풀에 포함된 스레드의 수가 현재 설정되어 있는 최대 스레드 값에 소정의 범위 내로 근접하면, 상기 현재 설정되어 있는 최대 스레드 값을 증가시켜 상기 메모리에 저장하고,
    (ii) 상기 메모리에 저장된 작업 큐의 사이즈에 대한 정보를 참조로 하여, 상기 최대 스레드 값이 증가하기 이전의 작업 큐의 사이즈와 상기 최대 스레드 값이 증가한 이후의 작업 큐의 사이즈를 비교하고, 상기 최대 스레드 값이 증가한 이후의 작업 큐의 사이즈가 상기 최대 스레드 값이 증가하기 이전의 작업 큐의 사이즈보다 크거나 같을 경우, 상기 최대 스레드 값을 다시 증가시켜 상기 메모리에 저장하며,
    상기 작업 큐의 사이즈를 참조함에 있어서 락(lock)을 잡지 않은 상태로 상기 작업 큐의 사이즈를 참조하는 것을 특징으로 하는 서버.
  19. 스레드 풀(thread pool)의 사이즈를 동적으로 관리하는 서버에 있어서,
    프로세서,
    작업 요청을 획득하는 통신부, 및
    작업 큐의 사이즈 및 스레드 풀에 설정되어 있는 최대 스레드 값을 저장하는 메모리를 포함하되,
    상기 프로세서는,
    (i) 상기 스레드 풀에 포함된 스레드의 수가 현재 설정되어 있는 최대 스레드 값에 소정의 범위 내로 근접하면, 상기 현재 설정되어 있는 최대 스레드 값을 증가시켜 상기 메모리에 저장하고,
    (ii) 상기 메모리에 저장된 작업 큐의 사이즈에 대한 정보를 참조로 하여, 상기 최대 스레드 값이 증가하기 이전의 작업 큐의 사이즈와 상기 최대 스레드 값이 증가한 이후의 작업 큐의 사이즈를 비교하고, 상기 최대 스레드 값이 증가한 이후의 작업 큐의 사이즈가 상기 최대 스레드 값이 증가하기 이전의 작업 큐의 사이즈보다 크거나 같을 경우, 상기 최대 스레드 값을 다시 증가시켜 상기 메모리에 저장하며,
    상기 (i) 및 상기 (ii) 각각에서 증가되는 최대 스레드 값은 CPU 코어의 개수를 참조로 하여 결정되는 것을 특징으로 하는 서버.
  20. 스레드 풀(thread pool)의 사이즈를 동적으로 관리하는 서버에 있어서,
    프로세서,
    작업 요청을 획득하는 통신부, 및
    작업 큐의 사이즈 및 스레드 풀에 설정되어 있는 최대 스레드 값을 저장하는 메모리를 포함하되,
    상기 프로세서는,
    (i) 상기 스레드 풀에 포함된 스레드의 수가 현재 설정되어 있는 최대 스레드 값에 소정의 범위 내로 근접하면, 상기 현재 설정되어 있는 최대 스레드 값을 증가시켜 상기 메모리에 저장하고,
    (ii) 상기 메모리에 저장된 작업 큐의 사이즈에 대한 정보를 참조로 하여, 상기 최대 스레드 값이 증가하기 이전의 작업 큐의 사이즈와 상기 최대 스레드 값이 증가한 이후의 작업 큐의 사이즈를 비교하고, 상기 최대 스레드 값이 증가한 이후의 작업 큐의 사이즈가 상기 최대 스레드 값이 증가하기 이전의 작업 큐의 사이즈보다 크거나 같을 경우, 상기 최대 스레드 값을 다시 증가시켜 상기 메모리에 저장하며,
    상기 (i) 및 상기 (ii) 각각에서 증가되는 최대 스레드 값은 서로 다르게 설정되는 것을 특징으로 하는 서버.
  21. 스레드 풀(thread pool)의 사이즈를 동적으로 관리하는 서버에 있어서,
    프로세서,
    작업 요청을 획득하는 통신부, 및
    작업 큐의 사이즈 및 스레드 풀에 설정되어 있는 최대 스레드 값을 저장하는 메모리를 포함하되,
    상기 프로세서는,
    (i) 상기 스레드 풀에 포함된 스레드의 수가 현재 설정되어 있는 최대 스레드 값에 소정의 범위 내로 근접하면, 상기 현재 설정되어 있는 최대 스레드 값을 증가시켜 상기 메모리에 저장하고,
    (ii) 상기 메모리에 저장된 작업 큐의 사이즈에 대한 정보를 참조로 하여, 상기 최대 스레드 값이 증가하기 이전의 작업 큐의 사이즈와 상기 최대 스레드 값이 증가한 이후의 작업 큐의 사이즈를 비교하고, 상기 최대 스레드 값이 증가한 이후의 작업 큐의 사이즈가 상기 최대 스레드 값이 증가하기 이전의 작업 큐의 사이즈보다 크거나 같을 경우, 상기 최대 스레드 값을 다시 증가시켜 상기 메모리에 저장하며,
    상기 (ii) 에서 최대 스레드 값의 증가분은, 상기 최대 스레드 값이 증가한 이후의 작업 큐의 사이즈가 상기 최대 스레드 값이 증가하기 이전의 작업 큐의 사이즈보다 큰 정도를 참조로 하여 결정되는 것을 특징으로 하는 서버.
  22. 스레드 풀(thread pool)의 사이즈를 동적으로 관리하는 서버에 있어서,
    프로세서,
    작업 요청을 획득하는 통신부, 및
    작업 큐의 사이즈 및 스레드 풀에 설정되어 있는 최대 스레드 값을 저장하는 메모리를 포함하되,
    상기 프로세서는,
    (i) 상기 스레드 풀에 포함된 스레드의 수가 현재 설정되어 있는 최대 스레드 값에 소정의 범위 내로 근접하면, 상기 현재 설정되어 있는 최대 스레드 값을 증가시켜 상기 메모리에 저장하고,
    (ii) 상기 메모리에 저장된 작업 큐의 사이즈에 대한 정보를 참조로 하여, 상기 최대 스레드 값이 증가하기 이전의 작업 큐의 사이즈와 상기 최대 스레드 값이 증가한 이후의 작업 큐의 사이즈를 비교하고, 상기 최대 스레드 값이 증가한 이후의 작업 큐의 사이즈가 상기 최대 스레드 값이 증가하기 이전의 작업 큐의 사이즈보다 크거나 같을 경우, 상기 최대 스레드 값을 다시 증가시켜 상기 메모리에 저장하며,
    상기 프로세서는,
    감시자 스레드로 하여금 상기 현재 설정되어 있는 최대 스레드 값을 증가시켜 상기 메모리에 저장하도록 하는 것을 특징으로 하는 서버.
  23. 제1항 내지 제3항, 제5항 내지 제11항 중 어느 한 항에 따른 방법을 실행하기 위한 컴퓨터 프로그램을 기록한 컴퓨터 판독 가능한 기록 매체.
KR1020150067663A 2015-05-14 2015-05-14 스레드 풀의 사이즈를 동적으로 관리하는 방법, 서버 및 컴퓨터 판독 가능한 기록매체 KR101576628B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020150067663A KR101576628B1 (ko) 2015-05-14 2015-05-14 스레드 풀의 사이즈를 동적으로 관리하는 방법, 서버 및 컴퓨터 판독 가능한 기록매체
US14/791,771 US9354931B1 (en) 2015-05-14 2015-07-06 Method, server and computer-readable recording medium for managing size of thread pool dynamically

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020150067663A KR101576628B1 (ko) 2015-05-14 2015-05-14 스레드 풀의 사이즈를 동적으로 관리하는 방법, 서버 및 컴퓨터 판독 가능한 기록매체

Publications (1)

Publication Number Publication Date
KR101576628B1 true KR101576628B1 (ko) 2015-12-10

Family

ID=54979288

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020150067663A KR101576628B1 (ko) 2015-05-14 2015-05-14 스레드 풀의 사이즈를 동적으로 관리하는 방법, 서버 및 컴퓨터 판독 가능한 기록매체

Country Status (2)

Country Link
US (1) US9354931B1 (ko)
KR (1) KR101576628B1 (ko)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9910711B1 (en) 2017-07-17 2018-03-06 Tmaxsoft. Co., Ltd. Method and computing device for managing size of thread pool dynamically
CN113157410A (zh) * 2021-03-30 2021-07-23 北京大米科技有限公司 线程池调节方法、装置、存储介质及电子设备
CN113391896A (zh) * 2021-06-15 2021-09-14 北京京东振世信息技术有限公司 任务处理方法及装置、存储介质及电子设备
CN113760632A (zh) * 2020-08-10 2021-12-07 北京沃东天骏信息技术有限公司 线程池性能监控方法、装置、设备和存储介质
US11340955B2 (en) 2020-01-02 2022-05-24 International Business Machines Corporation Thread pool management for multiple applications

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10506061B1 (en) * 2015-07-30 2019-12-10 CSC Holdings, LLC Adaptive system and method for dynamically adjusting message rates through a transport
US10146583B2 (en) * 2016-08-11 2018-12-04 Samsung Electronics Co., Ltd. System and method for dynamically managing compute and I/O resources in data processing systems
CN106557369B (zh) * 2016-11-25 2020-08-04 武汉斗鱼网络科技有限公司 一种多线程的管理方法及系统
CN109947554A (zh) * 2017-12-21 2019-06-28 江苏奥博洋信息技术有限公司 一种任务超时自动回收分配的方法
CN108667719B (zh) * 2018-04-26 2020-11-27 广州品唯软件有限公司 一种实时消息传递方法及系统
CN109840141B (zh) * 2018-12-15 2024-05-03 平安科技(深圳)有限公司 基于云监控的线程控制方法、装置、电子设备及存储介质
CN109840142B (zh) * 2018-12-15 2024-03-15 平安科技(深圳)有限公司 基于云监控的线程控制方法、装置、电子设备及存储介质
CN111078386A (zh) * 2019-12-30 2020-04-28 北京奇艺世纪科技有限公司 一种分布式调度系统的控制方法及控制装置
US11467877B2 (en) * 2020-01-31 2022-10-11 Salesforce, Inc. Throttling and limiting thread resources of service computing platform
CN114968569A (zh) * 2022-05-18 2022-08-30 浙江工商大学 一种基于分布式异构系统的任务智能处理方法
CN116821245A (zh) * 2023-07-05 2023-09-29 贝壳找房(北京)科技有限公司 分布式场景下数据聚合同步方法及存储介质
CN117215800A (zh) * 2023-11-07 2023-12-12 北京大数据先进技术研究院 一种动态线程控制系统

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7237242B2 (en) * 2002-12-31 2007-06-26 International Business Machines Corporation Dynamic thread pool tuning techniques
US20120239525A1 (en) * 2011-03-18 2012-09-20 Hewlett-Packard Company System and method for generating quantitative guideline for print order

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9910711B1 (en) 2017-07-17 2018-03-06 Tmaxsoft. Co., Ltd. Method and computing device for managing size of thread pool dynamically
KR101839392B1 (ko) * 2017-07-17 2018-03-16 주식회사 티맥스소프트 스레드 풀의 사이즈를 동적으로 관리하는 방법 및 컴퓨팅 장치
US11340955B2 (en) 2020-01-02 2022-05-24 International Business Machines Corporation Thread pool management for multiple applications
CN113760632A (zh) * 2020-08-10 2021-12-07 北京沃东天骏信息技术有限公司 线程池性能监控方法、装置、设备和存储介质
CN113157410A (zh) * 2021-03-30 2021-07-23 北京大米科技有限公司 线程池调节方法、装置、存储介质及电子设备
CN113391896A (zh) * 2021-06-15 2021-09-14 北京京东振世信息技术有限公司 任务处理方法及装置、存储介质及电子设备
CN113391896B (zh) * 2021-06-15 2023-09-22 北京京东振世信息技术有限公司 任务处理方法及装置、存储介质及电子设备

Also Published As

Publication number Publication date
US9354931B1 (en) 2016-05-31

Similar Documents

Publication Publication Date Title
KR101576628B1 (ko) 스레드 풀의 사이즈를 동적으로 관리하는 방법, 서버 및 컴퓨터 판독 가능한 기록매체
KR101839392B1 (ko) 스레드 풀의 사이즈를 동적으로 관리하는 방법 및 컴퓨팅 장치
US10713092B2 (en) Dynamic resource management of a pool of resources for multi-tenant applications based on sample exceution, query type or jobs
US10255217B2 (en) Two level QoS scheduling for latency and queue depth control
CN107291547B (zh) 一种任务调度处理方法、装置及系统
US11010199B2 (en) Efficient critical thread scheduling for non-privileged thread requests
US20130061220A1 (en) Method for on-demand inter-cloud load provisioning for transient bursts of computing needs
US20170359271A1 (en) Multi-tenant based system and method for providing services
US9553810B2 (en) Dynamic reconfiguration of network devices for outage prediction
US20220229694A1 (en) Systems and methods for thread management to optimize resource utilization in a distributed computing environment
US10721177B2 (en) Completion-side client throttling
Patros et al. SLO request modeling, reordering and scaling
Yazdanov et al. EHadoop: Network I/O aware scheduler for elastic MapReduce cluster
US10031776B2 (en) Workflow job distribution in a data processing system with agent time window constraints
Truong et al. Performance analysis of large-scale distributed stream processing systems on the cloud
EP2840513B1 (en) Dynamic task prioritization for in-memory databases
US11108698B2 (en) Systems and methods for client-side throttling after server handling in a trusted client component
US8788601B2 (en) Rapid notification system
US9021499B2 (en) Moving a logical device between processor modules in response to identifying a varying load pattern
US9378050B2 (en) Assigning an operation to a computing device based on a number of operations simultaneously executing on that device
US10540341B1 (en) System and method for dedupe aware storage quality of service
US9043353B2 (en) Query stream execution using priority gradient multiprogramming
US20230359490A1 (en) Device, system and method for scheduling job requests
Zhu et al. ScaleReactor: A graceful performance isolation agent with interference detection and investigation for container‐based scale‐out workloads
Wang et al. CurTail: Distributed Cotask Scheduling with Guaranteed Tail-Latency SLO

Legal Events

Date Code Title Description
E701 Decision to grant or registration of patent right
GRNT Written decision to grant