KR100326990B1 - 스레디드 서버의 성능을 향상시키기 위한 시스템 및 방법 - Google Patents

스레디드 서버의 성능을 향상시키기 위한 시스템 및 방법 Download PDF

Info

Publication number
KR100326990B1
KR100326990B1 KR1019990018127A KR19990018127A KR100326990B1 KR 100326990 B1 KR100326990 B1 KR 100326990B1 KR 1019990018127 A KR1019990018127 A KR 1019990018127A KR 19990018127 A KR19990018127 A KR 19990018127A KR 100326990 B1 KR100326990 B1 KR 100326990B1
Authority
KR
South Korea
Prior art keywords
queue
connection
connections
thread
threads
Prior art date
Application number
KR1019990018127A
Other languages
English (en)
Other versions
KR20000005691A (ko
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 포만 제프리 엘
Publication of KR20000005691A publication Critical patent/KR20000005691A/ko
Application granted granted Critical
Publication of KR100326990B1 publication Critical patent/KR100326990B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • 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

Abstract

본 발명은 다중 스레디드 서버 응용 프로그램이 실행되는 컴퓨터의 성능 향상을 위한 기술, 시스템 및 컴퓨터 코드를 기록한 기록 매체에 관한 것이다. 이용 가능 스레드(thread) 개수를 최적화하기 위해 경험적 지식에 의한 스케줄링이 정의된다. 이러한 경험적 지식은 수신된 요구를 위해 차단된 스레드를 깨우는 대신에, (스레드의 현재 작업이 완료 되자마자) 수신된 요구를 현재 실행중인 스레드에 할당하기 위해 대기하는 기술을 정의하여 작업자 스레드의 과잉 스케줄링을 완화시킨다. 너무 오래 대기하는 스레드가 없음을 보장하는 조건(provision)이 정해진다. 연결이 그 연결을 위한 작업이 도착한 시점의 작업자 스레드에만 연결되도록 2단이 수동 소켓과 결합된다. 하나 이상의 소스에서 온 입력을 병합하고 병합된 입력을 스케줄링에 이용 가능하도록 만드는 새로운 형태의 소켓이 정의된다. 영구적 연결이 사용될 경우 스레드를 수신된 요구에 할당하는 것을 최적화하기 위한 기득권 반환(giveback) 기능이 정의된다. 유휴 상태가 되는 스레드는 유휴 대기열에 놓이고, 작업자 스레드에서 해제된다.

Description

스레디드 서버의 성능을 향상시키기 위한 시스템 및 방법 {PERFORMANCE ENHANCEMENTS FOR THREADED SERVERS}
본 발명은 컴퓨터 성능에 관한 것으로, 특히 다중 스레디드 서버 응용 프로그램이 실행되는 컴퓨터의 성능 향상을 위한 기술, 시스템 및 컴퓨터 코드를 기록한 기록 매체에 관한 것이다. 경험적 지식에 의한 스케줄링(scheduling heuristic)은 이용 가능 스레드(thread)의 수를 최적화 할 수 있도록 정의된다. 데이터가 전송되지 않으면 스레드가 연결에 할당되지 않는다는 것을 보증하기 위해 수동 소켓(passive socket)용 2단 대기열(queue)이 정의된다. 하나 이상의 소스에서 온 입력을 병합하고 병합된 입력을 스케줄링에 이용 가능 하도록 만드는 새로운 형태의 소켓이 정의된다. 영구적 연결이 사용될 경우 요구에 대한 스레드 할당을 최적화하는 기능이 정의된다.
다중 스레디드 응용은 다중 스레드에 의한 동시 실행을 지원하는 소프트웨어 프로그램, 즉 재진입 가능 프로그램(re-entrant program)이다. 이러한 프로그램 내에서 하나의 스레드는 단일 실행 패스이다. 스레드는 이용 가능 스레드에 시간 슬라이스를 할당하는 운영 체제 스케줄러의 제어 하의 단일 프로세스 내에서 순차적으로 실행된다. 프로세스는 실행 프로그램의 한 인스턴스이다. 운영 체제는 스레드가 CPU를 시분할로 공유하는 것을 가능하게 하는 동시 스레드(concurrent thread) 각각의 정보를 간직하며, 동시 스레드는 서로 구별이 가능하다. 예를 들어, 각각의 스레드를 위한 서로 다른 현재의 인스트럭션 지시기가 레지스터들의 값으로 보존되어 있다. 일부 개별 상태 정보를 유지함으로써, 재진입 가능 프로그램을 통한 각 실행 패스는 마치 개별 프로그램이 실행되는 것처럼 독립적으로 동작할 수 있다. 가상 메모리와 개방 I/O(입출력) 스트림용 파일 설명자와 같은 기타 다른 상태 정보는 실행 효율을 위해서 프로세스 내의 모든 스레드에 의해 공유된다.SMP(대칭형 다중프로세서) 머신에서, 이와 같은 스레드 중 여러 개가 동시에 실행될 수 있다. 재진입 가능 프로그램은 다중 실행 패스 전체를 통하여 이러한 공유 자원들을 동기화시키는 메커니즘을 포함할 수 있다.
다중 스레디드 응용은 인터넷 환경에서 실행되는 서버에서 일반적으로 사용되고 있다. 인터넷은 전세계에 있는 사이트들이 네트워크로 상호 연결된, 광범위한 컴퓨터 자원의 집합이다. 매일 수백만의 사람들이 인터넷을 사용한다. 월드 와이드 웹(본 명세서에서는 웹으로 부름)은 인터넷에서 하이퍼 텍스트 전송 규약(HTTP)을 사용하여 메시지를 교환하는 프로토콜이다. (대안으로 'HTTPS' 프로토콜이 사용될 수 있는데, 이 프로토콜은 HTTP의 보안 강화 버전이다.)
인터넷 사용자는 일반적으로 인터넷 서비스 제공자(ISP)의 서비스를 통해 네트워크에 연결이 이루어지도록 함으로써 인터넷에 접속하여 사용한다. ISP는 컴퓨터 사용자가 컴퓨터 모뎀(또는 인공위성 전송 등과 같은 다른 연결 장비)을 사용하여 전화를 걸어서 ISP가 관리 또는 소유하는 원격 컴퓨터에 연결이 이루어지도록 해준다. 그 후 원격 컴퓨터는 사용자의 컴퓨터에 대한 서비스를 가능하게 해준다. 통상적인 서비스는 인터넷에 연결되어 있는 컴퓨터를 통해 사용자가 관심 있는 항목을 검색할 수 있는 검색 기능, 검색 장비로 찾은 정보를 디스플레이 하는 브라우즈 기능, 및 사용자가 편지를 다른 컴퓨터 사용자와 주고받을 수 있는 전자 우편 기능을 제공한다.
웹 환경에서 작업하는 사용자는 정보에 대한 요구를 작성하여 전송하고 그 결과를 볼 수 있도록 해주는 자신의 컴퓨터에서 실행되는 소프트웨어를 가지고 있다. 그와 같은 기능들은 일반적으로 '웹 브라우저' 또는 '브라우저'라고 부르는 것에 결합되어있다. 사용자가 브라우저를 사용해서 요구를 작성한 후에 그 요구 메시지는 처리를 위해 인터넷으로 전송된다. 요구 메시지의 목적지는 인터넷 네트워크에 연결된 컴퓨터들 중 한 컴퓨터이다. 해당 컴퓨터는 메시지를 수신하고, 사용자의 요구를 만족시키는 데이터를 찾으려고 시도하며, 해당 데이터를 사용자의 브라우저에 디스플레이 하도록 포맷시키고, 포맷된 응답을 사용자의 컴퓨터에서 실행되고있는 브라우저 소프트웨어로 되돌려 보낸다. 다수의 클라이언트가 동일한 컴퓨터에 접속할 수 있도록 하기 위해서, 클라이언트의 요구를 수신 및/또는 처리하는 컴퓨터는 일반적으로 다중 스레디드 응용 프로그램(application)을 실행한다. 개별 스레드들이 한 클라이언트의 요구를 다른 클라이언트의 요구와 분리하는데 사용되는 상기 응용 프로그램의 동일한 인스턴스는 다중 요구를 처리할 수 있다.
이것은 사용자가 정보를 요구하는 머신을 클라이언트라고 부르고, 정보를 찾아 그 정보를 클라이언트에 되돌려보내는 컴퓨터를 서버라고 부르는 클라이언트/서버 컴퓨팅 모델의 한 예이다. 웹 환경에서는 서버를 '웹 서버'라고 부른다. 클라이언트/서버 모델은 소위 '3단 구조(three-tier architecture)'로 확장될 수 있다. 이 3단 구조는 웹 서버를 중간 단에 위치시키고, 추가 단은 일반적으로 클라이언트의 요구를 처리하는 작업의 한 부분으로 웹 서버가 접근할 수 있는 정보 데이터 베이스를 나타낸다. 이 3단 구조는 많은 클라이언트 요구가 단지 정적인 데이터의 위치를 찾아 되돌려보내기 위한 것이 아니라 되돌려보낼 데이터를 동적으로 작성하기 위해 클라이언트의 요구를 처리하는 응용 프로그램을 필요로한다는 것을 인식한다. 이 3단 구조에서 웹 서버는 같은 의미로 '응용 서버'로 부를 수 있다. 서버에서 다중 스레디드 응용 프로그램이 실행될 경우, 서버를 같은 의미로 '스레디드 서버' 또는 '다중 스레디드 서버'라고 부를 수 있다.
서버는 스레드를 수행하여야 한다. 생성되었지만 소멸되지 않은 스레드 세트를 본 명세서에서는 스레드의 '풀(pool)'이라고 부르기로 한다. 풀에 생성되는 스레드 개수는 서버를 초기화할 때 구성 파라미터(configuration parameters)로서 보통 사용자(예를 들면, 시스템 관리자)에 의해 정해진다. 보통 이러한 파라미터는 서버가 예상되는 최대 연결 부하(즉, 클라이언트 요구의 최대 수)를 취급하기 위해 다수의 스레드를 생성하도록 설정된다.
TCP/IP 프로토콜(전송 제어 프로토콜/인터넷 프로토콜)은 네트워크 상의 데이터 전송 방법에 관한 사실상의 표준이며, 인터넷 전송에 광범위하게 사용된다. TCP/IP는 두 컴퓨터 사이에서 데이터를 주고받기 위해 두 '소켓'(각 소켓은 컴퓨터들 중 하나를 식별하는 주소와 그 컴퓨터 상의 특정 프로세스를 식별하는 포트 번호로 구성됨) 사이를 연결한다는 개념을 사용한다. 포트 번호에 의해 식별되는 프로세스는 해당 소켓용 입력 데이터를 수신할 프로세스이다. 소켓은 보통 두 컴퓨터 각각에 의해 연결에 사용되는 대기열(queue)로서 구현되는데, 컴퓨터는 전송을 위해 생성한 데이터를 연결 대기열 상으로 전송하고, 컴퓨터가 처리할 데이터 또한 연결 대기열을 통하여 수신한다.
다수의 클라이언트로부터의 요구를 수신하는 응용 프로그램의 경우 대기중인 클라이언트 연결의 대기열을 나타내는 특별 '수동' 소켓이 생성된다. 이러한 응용프로그램 서비스를 필요로 하는 각 클라이언트는 동일한 서버 포트 번호를 사용하여 이 수동 소켓에 연결을 요구한다(동일한 응용 프로그램에서 보안 소켓층 즉, 'SSL'과 같은 보안 프로토콜을 사용하는 통신은 통상적으로 보안이 없는 '일반' 통신과는 달리 다른 포트 번호를 사용함). 서버는 특별 수동 소켓으로부터 대기중인 클라이언트 연결을 받아들인다. 이것은 새로운 서버 소켓을 생성하고, 이 새로운 서버 소켓은 이용 가능한 프로세싱용 스레드에 할당된다.
이와 같은 환경에서 실행되는 다중 스레디드 서버 응용 프로그램을 구현하기 위한 현재의 접근 방법은 많은 단점이 있어, 그러한 응용 프로그램이 최적의 성능을 달성하지 못한다. 웹 서버에서 실행되는 그러한 응용 프로그램의 사용 인구가 증가함에 따라 서버는 하루에 수천 번, 심지어는 수백만 번의 '히트(hits)'(즉, 처리를 원하는 클라이언트의 요구)를 수신할 수 있으므로 성능은 중요한 문제가 된다. 본 발명은 이러한 성능 문제를 다룬다.
기존의 서버 구현에서, 개별 '디스패쳐(dispatcher)' 스레드는 일반적으로 소정의 응용 프로그램에서 수동 소켓용 연결 요구를 수신하는 대기열을 감시하여야 한다. 디스패칭을 수행 하는 스레드와 작업을 수행 하는 스레드를 구별하기 위해 본 명세서에서는 후자를 '작업자 스레드(worker threads)'라고 부르기로 한다. 디스패처 스레드는 작업자 스레드 각각의 상태를 계속 추적하며 요구 각각을 '이용 가능' 스레드에 할당한다. '이용 가능' 스레드는 실행 준비가 되어 있지만 현재 작업이 할당되어 있지 않은 스레드를 말한다. 이용 가능 상태의 스레드는 같은 표현으로 '유휴 스레드(idle thread)'라고 불리울 수도 있다. 작업이 유휴 스레드에할당되면, 그 스레드는 더 이상 유휴상태가 아니며, 현재 작업 요구가 완료될 때까지 추가 작업이 할당되지도 않는다. SMP 머신에서 디스패쳐 스레드는, 작업자 스레드가 모든 프로세서를 비지(busy) 상태로 유지하도록 충분히 빠르게 스케줄링 되는 것을 막는, 병목을 일으킬 수 있다.
대안으로, 디스패처 스레드를 사용하지 않고 서버를 구현할 수 있다. 이러한 접근 방법에서, 스레드는 임의의 다른 연결 요구가 있는지를 결정하기 위해 수동 소켓 대기열을 검사하여야 한다. 각 스레드가 자신이 처리중인 작업 요구를 완료함에 따라 스레드는 다음 요구를 위해 대기열을 조사한다. 요구가 대기 중이면 스레드는 요구를 대기열에서 제거하고 그 요구의 처리를 시작한다. 대기 중인 요구가 없으면, 스레드는 유휴 스레드가 된다. 유휴 스레드는 '휴면(sleep)' 상태가 되고, 시스템 타이머를 작동시켜 스레드를 미리 정한 시간동안 대기하도록 한 후 '깨워(awaken)' 작업이 도착했는지를 알아보기 위해 대기열을 다시 검사하게 한다. 이것을 '폴링(polling)' 모드라고 부른다. 폴링 모드에 대한 좀 더 일반적인 대안은 사건 중심 인터럽트(event-driven interrupt)를 사용하는 것이다. 이러한 접근 방법에서, 스레드는 유휴 상태로 들어가서, 작업이 도착하면 발생될 시스템 인터럽트를 대기하며, 인터럽트는 스레드가 다시 활성화 되도록 스레드에 신호를 보낸다. 유휴 상태로 들어가는 것은 또한 '차단(blocking)'이라고 부르며, 차단된 상태에서 깨어난 상태(즉, 인터럽트를 수신함)는 '차단 해제(unblocking)'라고 부른다.
사건 중심 인터럽트를 사용하는 현재의 서버 구현에서, 각 작업자 스레드가자신의 현재 요구를 완료하면, 또 다른 요구가 대기중인지 알아 보기 위해 수동 소켓 대기열을 검사한다. 대기중인 요구가 없을 경우 스레드는 차단된다. 소정 시간에 차단될 수 있는 스레드의 수는 제한이 없다. 다음 요구가 도착할 경우, 스레드를 깨우기 위해 사건이 생성된다. 차단된 작업자 스레드 각각은 이 인터럽트를 수신하여 해제되고, 대기열에서 요구를 가져오려고 시도한다. 첫 번째 작업자 스레드만이 요구를 가져올 수 있으며, 다른 작업자 스레드는 다시 대기열이 비었다는 것을 발견하고 차단 상태로 되돌아간다. 그러나 새로운 API(Application Programming Interface; 응용 프로그래밍 인터페이스)가 인터럽트 생성을 위한 상기 접근 방법을 변경하기 위해 개발 중에 있다. API는 본 명세서에서 '수용과 수신(accept_and_receive)'으로 불리운다. 수용과 수신 API에 따르면, 요구가 도착할 경우 인터럽트는 단 하나의 차단된 스레드에 대해서만 생성된다.
이 새로운 인터럽트 접근 방법은 본 명세서에서 '과잉 스케줄링(over-scheduling)'이라고 부르는, 본 발명에 의해서 해결되는 첫 번째 성능 문제를 야기한다. 연결 요구 개수가 스레드 풀에 있는 스레드 수보다 적은 경우(즉, 연결 부하가 서버에 구성된 최대 값보다 적은 경우), 풀 중에서 작업부하(workload)를 서비스하는데 사용되는 스레드가 너무 많다. 즉, 스레드 풀이 과잉 스케줄되어 있다. 이로 인해 자원이 비효율적으로 사용된다.
다음 시나리오는 '과잉 스케줄링' 문제를 예시한다. 모든 스레드가 차단되고, 연결 요구를 기다리고 있다고 가정한다. 첫 번째 요구가 도착한다. 시스템 스케줄러는 차단된 스레드 중 하나를 깨워서 요구를 그 스레드에 할당한다. 스레드는 요구를 처리하기 시작한다. 그 후 두 번째 요구가 도착하고, 스케줄러는 두 번째 차단된 스레드를 깨우고 이 새로운 요구를 두 번째 스레드에 할당한다. 두 번째 스레드가 두 번째 새로운 요구의 처리를 시작한다. 첫 번째 스레드가 자신이 작업 중이던 요구를 완료하고, 수동 소켓을 검사한다. 새로운 연결 요구가 없으면 첫 번째 스레드는 차단된다. 두 개의 요구에 대해 스케줄러는 두 개의 스레드를 깨운다.
그러나 첫 번째 스레드가 첫 번째 요구를 거의 마칠 무렵 두 번째 요구가 도착할 수 있다. 이러한 경우, 두 번째 스레드를 깨우기보다는 첫 번째 스레드가 작업을 끝내고 수동 소켓을 검사할 때 두 번째 요구를 찾도록 대기하는 것이 더 효율적일 것이다. 스케줄러가 요구에 대해 매번 새로운 스레드를 깨우면(즉, 스레드가 과잉 스케줄되면), 요구에 따라 동작하는 스레드는 자신의 현재 요구를 완료하고 다른 것을 검사할 때 입력 연결 대기열이 항상 비어 있는 것을 발견할 것이 확실하다. 따라서 스레드들은 각각의 요구를 완료한 후에 차단된다. 반복적인 차단과 해제 동작은 요구를 처리하는 전체 패스 길이 측면에서 보면 비용이 많이 든다. 스레드가 차단되면, 스케줄러는 그 스레드의 문맥 정보를 저장하고, 스레드는 '준비(ready)' 상태에서 '차단(blocked)' 상태가 된다. 해제 동작은 인터럽트 처리와 관련하여 상당히 큰 오버헤드(overhead)를 요구한다.
과잉 스케줄링이 되어있는 동안 시스템 성능에 미치는 추가 영향은 메모리 페이징 메커니즘에 의해 야기된다. 스레드가 실행되면, 저장된 정보를 참조한다. 그 정보는 처리될 메모리에 있어야 한다. 만일 해당 정보가 메모리에 없으면, 그정보는 페이지 인(page-in) 된다. 일반적으로 페이지가 페이지 인될 공간을 마련하기 위해서는 다른 페이지가 페이지 아웃(page-out)되어야 한다. 페이징 메커니즘은 페이지 아웃될 페이지를 결정하기 위해 알고리즘을 사용한다. 보통 최소 최근 사용 페이지가 페이지 아웃되도록 선택된다. 과잉 스케줄링이 발생하면 각 스레드는 실행된 후에 차단되고, 따라서 그 스레드의 페이지는 비사용 상태가 된다. 스레드가 차단된 기간이 길수록 그 스레드의 페이지가 페이지 아웃될 가능성이 더 커진다. 그 후 스레드를 깨울 경우, 그 스레드의 페이지는 다시 페이지 인 되어야 하고, 이것은 다른 스레드의 페이지를 페이지 아웃시킨다. 이러한 페이징 동작에 따라 야기되는 추가 처리는 요구의 처리 효율을 감소시킨다.
또한 수동 소켓이 비었다는 것을 발견하게 되는 수동 소켓 검사 동작은 차단 스레드의 효율을 추가로 감소시키는 낭비 동작이다.
두 번째 성능 문제는 본 명세서에서 '다중 입력 소스' 문제라고 부르기로 한다. 전술한 대로, 서버 응용 프로그램은 하나의 수동 소켓에 비보안 연결 요구를 수신하고, 두 번째 수동 소켓에 보안 연결 요구를 수신할 수 있다. 이것은 예를 들면, 온라인 쇼핑 응용 프로그램에서 있을 수 있는 경우이다. 클라이언트인 구매자는 온라인 카탈로그에서 구매 가능한 제품을 디스플레이하도록 요구할 수 있고, 마침내 주문하기 위해 몇 개의 상품을 선택한다. 정보를 디스플레이하도록 하는 상기 요구는 보안 연결과 관련된 추가 처리 부담이 발생하지 않도록 보통 비보안 연결로 전송된다. 구매자가 주문을 할 때, 그는 신용카드 지불을 선택할 수 있고, 자신의 신용카드 정보를 전자적으로 제공한다. 구매자의 정보를 보호하기 위해 이러한 트랜잭션 부분은 보안 연결로 전송된다. 일반적으로 판매자는 구매 트랜잭션의 전체 과정 처리를 위해 동일한 서버 응용 프로그램을 사용한다. 따라서 응용 프로그램은 두 가지 수동 소켓에서 오는 비보안 연결 요구와 보안 연결 요구 양자를 수용할 수 있어야 한다.
웹 서버가 하나 이상의 호스트 이름으로 호스트 역할을 하는 경우, 각 호스트 이름은 자기 자신의 IP 주소를 갖고, 각 호스트 이름을 위해서 한 쌍의 수동 소켓이 사용된다. 따라서 소정의 응용 프로그램은 많은 수동 소켓에 도착하는 연결을 받아들일 필요가 있다. 그와 같은 소켓 세트를 본 명세서에서는 다중 입력 소스라고 부른다.
소켓 대기열 관리에 대한 전술한 디스패쳐 스레드 접근법에서는, 하나의 디스패쳐(또는 억셉터) 스레드가 각 수동 소켓에 할당된다. 연결 요구가 도착하면, 이들 디스패쳐는 이용 가능한 작업자 스레드를 스레드 풀에서 찾아, 요구를 해당 스레드에 할당하여야 한다. 디스패쳐 스레드의 수가 증가하면, 작업자 스레드의 공유 풀을 관리하기 위한 디스패쳐 스레드들 사이의 방해도 또한 증가한다.
디스패쳐 스레드가 사용되지 않고, 도착 대기열을 검사하는 책임이 작업자 스레드에 속할 경우, 스레드 풀은 수동 소켓 대기열 세트 전체에 걸쳐서 정적으로 분할된다. 임의 특정 시점에서의 작업 부하와 대응하는 수동 소켓 중의 요구 분포가 예측하기 어려우므로 이같은 정적 분할은 최적화 상태가 아닐 가능성이 매우 크다. 하나의 대기열은 자신의 작업 부하를 다루기에는 너무 적은 스레드를 가질 수 있고 다른 것은 반대로 너무 많은 스레드를 가질 수 있다. 이용 가능한 스레드가너무 적을 경우, 요구는 대기열에서 대기해야 하고, 그 동안 이용 가능한 시스템 용량이 유휴 상태에 놓이게 된다. 입력 요구는 일반적으로 사람으로 하여금 응답을 대기하도록 하므로, 이러한 형태의 응답을 처리시 지연은 가능한 최대한으로 피해야 한다. 너무 많은 스레드가 이용 가능할 경우, 앞서 논의한 과잉 스케줄링에 의한 비효율성을 가져올 것이다. 작업자 스레드 풀이 수동 소켓들의 현재 작업 분포에 기초해서 나눈 동적 분할은 서버 응용 프로그램에 의해서 달성될 수 없는데, 그 이유는 수동 소켓의 연결 대기열의 깊이가 서버 응용 프로그램에 이용 가능하지 않기 때문이다.
세 번째 성능문제는 본 명세서에서 '영구적 연결 스케줄링(persistent connection scheduling)'이라고 부른다. 영구적 연결능력은 HTTP 1.1 버전에 소개되어 있으며, 클라이언트와 서버 사이의 요구열(및 대응하는 응답)에 사용되는 단일 연결을 인에이블시킨다. 영구적 연결은 이를 사용하지 않을 경우 개개의 요구마다 요구되는 TCP 연결의 설정과 분리에 드는 비용을 제거하므로 일련의 요구 처리와 관련한 오버헤드를 줄이기 위해 사용된다. 대신에 단일 설정과 단일 분리를 사용한다. 앞에서는 클라이언트에서 생성된 각 요구가 새로운 연결을 만드는데, 이 새로운 연결은 그 요구의 존속기간에만 존속한다. 연결을 이루는데 메시지 교환이 필요하며, 연결을 닫는데 또 다른 메시지 교환이 필요하다. 많은 웹 기반 응용 프로그램은 사용자에게 정보를 디스플레이할 상당히 복잡한 정보 페이지를 생성하고, 각 페이지는 네트워크를 통해 전송되기 위해 다수의 개별 요구를 필요로 할 수 있다. 예를 들어, 하나의 요구는 해당 페이지에 각 그래픽 이미지용으로 전송되고, 다른 요구는 정적 텍스트용으로, 기타 나머지 다른 요구는 동적으로 생성된 텍스트용으로 전송될 수 있다. 따라서 단일 웹 페이지를 디스플레이하기 위해서 영구적 연결의 사용은 처리 부담을 상당히 줄인다. 즉, 일단 두 컴퓨터 사이에 사용할 연결이 만들어지면, 클라이언트는 몇 개의 요구이든 서버가 각 요구를 수신했음을 확인하도록 대기하기 위해 중단하는 일없이 그 연결을 통해 요구를 전송할 수 있다. 이것을 요구 전송의 '스트림' 모드라고 부른다. 서버는 순서에 따라 모든 요구에 응답할 것이 요구된다. 프로토콜 에러없이 클라이언트나 서버는 어느 요구 영역에서든 연결을 종료할 수 있다.
실제로, 브라우저에서 클라이언트 소프트웨어는 사용자가 다른 웹 사이트(본 명세서에서는 서버 소켓 주소가 다르며, 따라서 새로운 연결이 필요함)로 이동할 때까지 상기 영구적 연결을 계속 개방 상태로 유지한다. 최종 요구를 개방 상태의 영구적 연결에 전송하고 사용자가 새 사이트로 옮길 때까지의 사이에는 상당한 시간이 경과될 수 있다. 기존의 연결을 위한 소켓은 이 시간동안 들어오는 데이터가 없다. 서버 응용 프로그램은 소켓이 이러한 특정 상태에 있는지(즉, 클라이언트가 데이터 전송을 종료하였지만 연결은 여전히 개방되어 있음)의 여부, 또는 클라이언트가 자신의 다음 요구를 아직 생성하지 않았는지의 여부를 알 수 없다. 그러므로 이러한 형태의 연결에 대해서는 서버가 다음 요구를 판독하는데 불확실성이 존재한다. 데이터가 곧 도착하여 대기열에 데이터가 있을 수 있거나, 얼마동안 데이터가 도착하지 않을 수도 있다. 어떤 데이터 패킷이든 연결에서 진행중인 작업에 대한 클라이언트 요구이거나 소켓을 닫으라는 요구를 포함할 수 있다.
데이터가 곧 도착하는 경우라면, 연결을 작업자 스레드에 계속 묶어 두고 작업자 스레드는 임시로 유휴 상태로 가도록 하는것이 가장 효율적이다. 그러나 데이터가 도착할 때까지 지연이 길어지는 경우, 작업자 스레드를 이 연결에 묶지 않고 다른 요구를 할당하는 것이 더 효율적이다. 그리고 묶이지 않은 연결에 대한 다음 요구가 도착하면, 원래 연결되었던 스레드와 가장 유사한 다른 스레드가 처리를 계속하도록 할당된다. 임의의 요구들 사이에서 어느 연결이 지연이 길 것인지, 지연이 언제 일어날 것인지, 지연이 얼마나 오래 지속될 것인지를 사전에 알 수 있는 방법은 없다. 새로운 연결을 받아들이는 스레드와 지연 후에 재활성화되는 연결을 다루는 스레드 사이의 작업자 스레드의 풀을 분할하려는 시도는 앞서 논의한 다중 입력 소스 문제와 유사한 문제를 일으킨다: 즉, 어느 한쪽 분할에 너무 많은 스레드를 할당하거나 너무 적은 스레드 할당하면 비효율성을 가져온다.
따라서 다중 스레디드 서버 응용 프로그램의 현재 구현에서 발생하는 이러한 비효율성을 극복할 수 있는 기술이 필요하다. 본 발명에서 제안된 기술은 이용 가능 스레드의 개수를 최적화하기 위한 경험적 지식에 의한 스케줄링, 수동 소켓용 2단 대기열, 하나 이상의 소스에서 나온 입력을 병합하고 그 병합된 입력을 스케줄링에 이용 가능하게 만들기 위한 새로운 형태의 소켓, 영구적 연결이 사용될 경우 요구에 대한 스레드의 할당을 최적화하는 함수로 정의 된다.
본 발명의 목적은 다중 스레디드 서버의 성능을 향상시키는 기술을 제공하는 것이다.
본 발명의 다른 목적은 작업자 스레드에 대한 요구의 스케줄링을 최적화하여 성능 향상을 달성하는 기술을 제공하는 것이다.
본 발명의 또다른 목적은 이용 가능 스레드의 개수를 최적화하는 경험적 지식에 의한 스케줄링을 정의하여 최적화를 제공하는 것이다.
본 발명의 추가 목적은 하나 이상의 소스로부터의 입력을 병합하고, 그 병합된 입력을 스케줄링에 이용 가능하게 만드는 새로운 형태의 소켓을 정의하여 최적화를 제공하는 것이다.
본 발명의 다른 목적은 영구적 연결이 사용될 경우 요구에 대한 스레드 할당을 최적화하는 함수를 정의하여 최적화를 제공하는 것이다.
본 발명의 다른 목적과 장점들은 일부는 이하의 상세한 설명과 도면에 설명될 것이고, 일부는 상세한 설명으로부터 자명하거나 본 발명의 실시에 의해 이해될 것이다.
앞서 말한 목적을 달성하고, 본 명세서에서 광범위하게 기술한 본 발명의 목적에 따르면, 본 발명은 연결을 위한 다수의 클라이언트 요구, 다수의 작업자 스레드, 상기 다수의 클라이언트 요구를 수신하기 위한 서브 프로세스, 및 상기 작업자 스레드의 과잉 스케줄링을 완화하기 위해 경험적 지식으로 스케줄링을 구현하는 서브 프로세스를 포함하는 다중 스레디드 응용 프로그램의 성능을 향상시키기 위해 네트워크에 대한 연결을 갖는 컴퓨팅 환경에서 사용하기 위한 소프트웨어 프로세스를 구현하기 위한 시스템, 방법, 및 컴퓨터 판독 가능한 코드를 기록한 기록 매체를 제공한다. 또한 상기 작업자 스레드의 첫 번째 그룹은 활성 스레드이고, 상기 첫 번째 그룹은 상기 다수의 작업자 스레드의 변경 가능한 활성 스레드들로 구성되고 상기 변경 가능한 스레드들의 변경 가능 수를 가지며, 상기 변경가능 수는 적어도 1이며; 경험적 지식에 의한 스케줄링을 구현하기 위한 상기 서브 프로세스는 상기 다수의 클라이언트 요구를 하나 이상 포함하는 현재 작업 부하에 대해 상기 첫 번째 그룹의 변경 가능 수의 균형을 잡기 위한 서브 프로세스를 추가로 포함한다. 균형을 잡기 위한 상기 서브 프로세스는 평균 지연과 최대 지연의 사용을 추가로 포함한다. 상기 평균 지연과 최대 지연은 구성 파라미터(configuration parameter)인 것이 바람직하다. 상기 작업자 스레드의 첫 번째 그룹 이외에, 차단된 스레드이고 후입 선출 대기열에 저장되는 상기 작업자 스레드의 두 번째 그룹이 있을 수 있다(상기 두 번째 그룹은 상기 다수의 작업자 스레드 중 상기 첫 번째 그룹에 속하지 않은 활성 스레드들로 구성됨). 또한 본 발명은 다중 스레디드 응용 프로그램의 성능 향상을 위한 시스템, 방법, 컴퓨터 판독 가능 코드를 저장하는 기록 매체를 제공한다. 상기 다중 스레디드 응용 프로그램은 상기 연결 각각이 수용될 경우 대기중인 연결 대기열(queue)에서 첫 번째 대기열로 연결을 옮기는 서브 프로세스, 상기 연결을 위한 초기화 데이터 패킷이 도착할 경우 상기 연결 각각을 첫 번째 대기열에서 두 번째 대기열로 옮기는 서브 프로세스, 및 작업자 스레드를 상기 두 번째 대기열의 연결 각각에 할당하기 위한 서브 프로세스를 포함한다. 또한 본 발명은 다중 스레디드 응용 프로그램의 성능을 향상시키기 위한 시스템, 방법, 컴퓨터 판독 가능 코드를 저장하는 기록 매체를 제공한다. 상기 다중 스레디드 응용 프로그램의 코드는 다중 소스에서 입력을 수신하는 서브 프로세스, 스케쥴링을 위해 상기 수신된 입력을 단일 대기열에 병합하는 서브 프로세스를 포함한다. 상기 다중 스레디드 응용 프로그램은 상기 연결 각각이 받아들여질 경우 대기중인 연결 대기열(queue)에서 첫 번째 대기열로 연결을 옮기는 서브 프로세스, 상기 연결을 위한 초기화 데이터 패킷이 도착할 경우 상기 연결 각각을 첫 번째 대기열에서 상기 단일 대기열로 옮기는 서브 프로세스, 및 작업자 스레드를 상기 단일 대기열의 연결 각각에 할당하기 위한 서브 프로세스를 추가로 포함하는 것이 바람직하다. 스케줄링을 위한 상기 서브 프로세스는 다수의 작업자 스레드의 변경 가능한 활성 스레드들로 구성되고 상기 변경 가능한 활성 스레드들은 변경가능 수를 가지며, 상기 변경가능 수는 적어도 1인 활성 작업자 그룹; 및 상기 서브 프로세스는 추가로 상기 단일 대기열에 저장되는 클라이언트 요구를 포함하는 현재 작업 부하에 대해 상기 활성 그룹에서 상기 변경가능 번호의 균형을 잡기 위한, 경험적 지식에 의한 스케줄링을 구현하는 서브 프로세스를 포함하는 것이 바람직하다. 또한 본 발명은 다중 스레디드 응용 프로그램의 성능을 향상시키기 위한 시스템, 방법, 컴퓨터 판독 가능 코드를 저장하는 기록 매체를 제공한다. 상기 다중 스레디드 응용 프로그램은 다수의 영구적 연결; 다수의 작업자 스레드; 상기 영구적 연결 중 선택된 것을 선택된 상기 작업자 스레드에 결합하기 위한(binding) 서브 프로세스―여기서 결합하기 위한 서브 프로세스의 실행을 통해 결합 연결(bound connection)이 만들어짐―; 및 선택된 상기 결합 연결을 결합 해제하기 위한 서브 프로세스―여기서 결합 해제하기 위한 서브 프로세스의 실행을 통해 결합 해제 작업자 스레드가 만들어짐―를 포함한다. 결합하기 위한 상기 서브 프로세스는 2단 대기열 사용을 추가로 포함하고, 결합 해제하기 위한 상기 서브 프로세스도 추가로 상기 2단 대기열을 포함하는 것이 바람직하다. 상기 2단 대기열을 사용하여 결합하기 위한 상기 서브 프로세스는 상기 연결을 위한 초기화 데이터 패킷이 도착할 경우 상기 영구적 연결 각각을 상기 제1 단으로 옮기는 서브 프로세스; 상기 연결을 위해 데이터가 수신될 경우 상기 영구적 연결을 상기 제2 단에서 상기 제1 단으로 옮기는 서브 프로세스; 상기 영구적 연결을 상기 제1 단에서 스케줄링하기 위한 서브 프로세스를 추가로 포함하고, 상기 2단 대기열을 사용하여 결합 해제하기 위한 상기 서브 프로세스는 선택된 결합 연결이 유휴 상태가 될 경우 상기 제1 단에서 상기 제2 단으로 상기 결합 연결 중 선택된 것들을 옮기는 서브 프로세스; 최대 유휴 기간을 초과한 것에 응답하여 상기 제2 단에서 상기 영구적 연결 중 선택된 것들을 닫기 위한 서브 프로세스; 및 상기 결합하기 위한 서브 프로세스에 상기 결합 해제 작업자 스레드를 이용 가능하도록 만드는 서브 프로세스를 추가로 포함한다. 결합 해제하기 위한 상기 서브 프로세스는 유휴 연결의 최대 개수 초과에 응답하여, 상기 제2 단에서 상기 영구적 연결 중 추가로 선택된 것들을 닫기 위한 서브 프로세스를 추가로 포함하는 것이 바람직하다.
본 발명은 첨부한 도면을 참조하여 설명되고, 전체 도면에서 같은 참조 번호는 같은 구성 요소를 나타낸다.
도 1은 본 발명을 실시할 수 있는 컴퓨터 워크스테이션 환경의 블록도.
도 2는 본 발명을 실시할 수 있는, 네트워크로 연결된 컴퓨팅 환경의 도면.
도 3a-3c는 과잉 스케줄링 문제를 완화하는 본 발명과 관련 있는 로직을 설명하는 순서도를 예시하는 도면.
도 4는 하나 이상의 소스에서 온 입력을 병합할 경우 병합된 입력을 스케줄링에 이용 가능하도록 만들기 위한 본 발명과 관련 있는 로직을 설명하는 순서도를 예시하는 도면.
도 5a-5b는 본 발명에서 사용되는 다단계 대기열을 개념적으로 보여주는 도면.
도 6a-6b는 영구적 연결을 사용할 경우 요구에 대한 스레드의 할당을 최적화하기 위한 본 발명과 관련 있는 로직을 설명하는 순서도를 예시하는 도면.
도 1은 본 발명이 실시될 수 있는 대표적인 워크스테이션 하드웨어 환경을 예시한다. 도 1의 환경은 주변 장치를 포함한 개인용 컴퓨터와 같은, 대표적인 컴퓨터 또는 지능형 워크스테이션(10)을 구성한다. 워크스테이션(10)은 또한 네트워크 환경에서의 서버를 나타낼 수도 있다. 워크스테이션(10)은마이크로프로세서(12)와 버스(14)를 포함하며, 버스(14)는 알려진 기술에 따라 마이크로프로세서(12)와 워크스테이션(10)의 구성요소들 사이를 연결하고 통신이 가능하도록 하기 위해 채용된다. 워크스테이션(10)은 일반적으로 버스(14)를 통해 마이크로프로세서(12)를 키보드(18), 마우스(20), 및/또는 다른 인터페이스 장치(22)와 같은 하나 이상의 인터페이스 장치에 연결하는 사용자 인터페이스 어댑터(16)를 포함하며, 다른 인터페이스 장치(22)는 접촉식 화면, 디지타이저 패드 등과 같은 임의의 사용자 인터페이스 장치가 될 수 있다. 버스(14)는 또한 디스플레이 어댑터(26)를 통해서 마이크로프로세서(12)에 LCD 화면이나 모니터와 같은 디스플레이 장치(24)를 연결한다. 버스(14)는 또한 마이크로프로세서(12)를 메모리(28)와 하드 드라이브, 디스켓 드라이브, 테이프 드라이브 등을 포함 할 수 있는 장기간 기억장치(30)에 연결한다.
워크스테이션(10)은 통신 채널(32)을 통해서 다른 컴퓨터나 컴퓨터 네트워크와 통신한다. 워크스테이션(10)은 근거리 통신망(LAN)이나 광역 통신망에서 다른 컴퓨터와 연결될 수 있고, 또는 다른 컴퓨터와의 클라이언트/서버 결합에서 클라이언트가 될 수 있다. 적합한 통신 하드웨어와 소프트웨어를 포함한 이러한 모든 구성은 기지의 기술이다.
도 2는 본 발명이 실시될 수 있는 데이터 처리 네트워크(40)의 예시도이다. 데이터 처리 네트워크(40)는 LAN(42, 44)을 포함하는 다수의 개별 네트워크를 포함하며, 각각의 LAN은 다수의 워크스테이션(10)을 포함한다. 대안으로 당업자들이 이해할 수 있는 바와 같이, LAN은 호스트 프로세서에 결합된 다수의 지능형 워크스테이션을 포함할 수 있다.
도 2를 계속 참조하면, 데이터 처리 네트워크(40)는 바람직 하게는 통신 링크(48)에 의해 LAN(44)에 연결될 수 있는 대형 컴퓨터(46)와 같은 다수의 대형 컴퓨터나 서버를 또한 포함할 수 있다. 대형 컴퓨터(46)는 IBM사의 Enterprise Systems Architecture/370이나 Enterprise Systems Architecture/390 컴퓨터 또는 다른 종류의 대형 컴퓨터를 사용하여 구성할 수 있다. 응용 프로그램에 따라서는 Application System/400(AS/400으로도 알려져 있음)과 같은 중형 컴퓨터도 채용될 수 있다. 'Enterprise Systems Architecture/370'은 IBM사의 상표이고, 'Enterprise Systems Architecture/390', 'Application System/400', 'AS/400'은 IBM사의 등록상표이다.
대형 컴퓨터(46)에 LAN(44)의 원격 저장 장치로서 기능할 수 있는 기억 장치(50)를 연결할 수 있다. 마찬가지로, LAN(44)은 통신 링크(52)를 통해 부시스템 제어 유닛/통신 제어기(54)에 연결될 수 있고, 통신 링크(56)는 게이트웨이 서버(58)에 연결될 수 있다. 게이트웨이 서버(58)는 대부분의 경우 LAN(42)을 LAN(44)에 연결시키는 개별 컴퓨터 또는 지능형 워크스테이션이다.
당업자는 대형 컴퓨터(46)가 LAN(44)에서 지리적으로 멀리 떨어져 있을 수 있고, 마찬가지로 LAN(44)도 LAN(42)에서 상당한 거리를 두고 떨어져 있을 수 있다는 것을 인식할 것이다. 예를 들면, LAN(42)은 캘리포니아에, LAN(44)은 텍사스에 있고, 대형 컴퓨터는 뉴욕에 있을 수 있다.
본 발명을 구현하는 소프트웨어 프로그래밍 코드는 일반적으로 클라이언트/서버 또는 3단 구조 환경에서 서버(46)와 같은 서버에 인스톨되며, 여기서 서버(46)는 워크스테이션(10) 같은 컴퓨터를 가진 사용자가 보낸 요구를 처리한다. 코드는 통상적으로 서버 메모리(28)에 구현될 수 있으며, 마이크로프로세서(12)는 버스(14)를 사용해서 접근할 수 있다. 대안으로, 코드는 CD-ROM 드라이브나 하드 드라이브와 같은 소정 형태의 장기간 기억 매체(30)를 사용하여 접근될 수도 있다. 소프트웨어 프로그래밍 코드는 디스켓이나 하드 드라이브 또는 CD-ROM 등과 같이 데이터 처리 시스템에서 사용하는 이미 알려진 다양한 종류의 매체에서도 구현될 수 있다. 코드는 다른 시스템에서 사용되기 위해 상기와 같은 매체로 배포되거나, 또는 한 컴퓨터 시스템의 메모리나 기억장치에서 소정 형태의 네트워크를 통하여 다른 컴퓨터로 배포될 수 있다. 소프트웨어 프로그래밍 코드를 메모리 내에서, 물리적인 매체 상에서 구현하거나 소프트웨어를 네트워크를 통하여 배포하는 것은 잘 알려진 기술과 방법이므로 본 명세서에서 자세히 논의하지는 않겠다.
웹 환경에서 서버는 보통 디스플레이 장치(24)를 포함하지 않지만, 본 발명의 바람직한 실시예는(예를 들면, 시스템 관리자에 의한) 본 발명의 스케줄링 최적화를 위해 필요한 파라미터의 구성을 허용하기 위해 디스플레이 장치(24)를 사용한다.
본 발명의 바람직한 실시예는 도 3-6을 참조하여 논의된다.
바람직한 실시예에서, 본 발명은 컴퓨터 소프트웨어 프로그램으로 구현된다. 이러한 프로그램은 클라이언트가 데이터 요구를 서버에 전송했던 위치(장소)에서 사용되고, 네트워크의 서버 쪽에서 처리가 완료된 부분을 포함한다. 본 발명은 다중 스레드를 사용하는 응용 프로그램 처리를 수행하는 서버와 함께 동작한다. 일반적으로 프로그램은 서버가 웹 서버이고, 요구가 HTTP(또는 HTTPS)를 사용하여 포맷되는 인터넷 환경에서 사용될 수 있다. 대안으로, 연결이 사용자의 컴퓨터가 구성요소가 되는 기업 인트라넷(즉, 사용자의 회사가 내부적으로 소유하고 관리하는 네트워크)이 될 수 있는데, 이 기업 인트라넷은 인터넷과 유사한 방식으로 서비스를 제공한다. 본 명세서에서는 다른 표시가 없으면, 인트라넷에서 일어나는 처리를 포함하여 사용자의 요구와 관련한 처리를 논의할 때 '인터넷'이라는 용어를 사용한다. 바람직한 실시예의 프로그램 코드는 스몰토크(Smalltalk)와 같은 객체 지향 프로그래밍 언어의 객체 또는 종래의 'C'와 같은 절차 지향 프로그래밍 언어의 함수나 서브루틴으로 구현될 수 있다.
도3a-3c는 앞서 논의한 과잉 스케줄링 문제를 완화하는 첫 번째 바람직한 실시예와 관련 있는 로직을 설명하는 순서도를 예시한다.
도3a는 요구를 처리해야 하는 연결이 있는지 결정하기 위해 작업자 스레드에 의해 실행되는 로직을 나타낸다. 프로세스는 단계(100)에서 시작하며, 이 단계에서 상기 로직에 들어오기 전에 이 스레드가 이미 요구를 처리하고 있었는지를 묻는다. 응답이 부정이면 제어권은 단계(115)로 옮겨진다. 그렇지 않으면, 단계(105 및 110)를 실행하여 스레드를 위한 통계치를 모은다. 단계(105)는 현재 실행중인 스레드 숫자의 계수기를 감소시킨다. (이 계수기는 서버가 초기화될 때 0으로 초기화 되고, 도3b의 논의에서 'T'로 불린다.) 단계(110)는 스레드가 실행되는 시간을 계산하고(스레드가 선행 연결을 처리하도록 할당되었을 때, 단계(130)에서 미리기록된 시작 시간을 사용), 평균값(도3b를 참조하여 추가로 논의됨)을 갱신한다. 그 후 제어권이 단계(115)로 옮겨진다.
단계(115)에서, 이 작업자 스레드에 의한 처리를 위해 준비된 임의의 연결이 있는지 여부를 결정하는 시험이 행해진다. 상기 바람직한 실시예에 따르면, 데이터가 연결에 도달할 때까지 연결은 작업자 스레드에 할당되지 않는다. 일부 클라이언트는 연결을 요구하지만, 그 후 데이터 요구를 전송하기 전에 그 연결을 닫을 수 있다. 클라이언트가 데이터를 전송하는 것이 알려질 때까지 작업자 스레드에 연결을 할당하는 것을 지연시키므로, 작업자 스레드의 비생산적인 사용을 회피한다. 수용된 연결 중에서 데이터를 수신하지 않은 연결을 구분하기 위해, 2단 대기열이 정의된다. 연결(즉, 연결을 위한 대기열 요소)은 그것이 수용되었을 경우(그리고 클라이언트가 연결을 인식했을 때) 제1 단으로 옮겨지고, 데이터가 도착할 때까지 그곳에 머문다. 제1 단은 '수용된 연결 대기열(accepted connections queue)'로 불린다. 일단 데이터 패킷이 도착하면, 연결은 제2 단으로 이동한다. 제2 단은 '준비 대기열(ready queue)'로 불릴 수 있다. 작업자 스레드는 제2 단에 도달한 연결에만 할당된다. 제1 단은 선입 선출(FIFO) 대기열로 구현되는 것이 바람직하다. 그러나, 데이터가 연결을 위해 도착하면 연결은 대기열에서 제거되는데, 엄격하게 FIFO 방식을 사용하는 것은 아니며, 제1 단에서 구성 요소를 저장하기 위해(연결 리스트와 같은) 다른 구조가 사용될 수 있다. 바람직하게는, 제2 단은 FIFO 대기열로 구현되므로, 연결은 대기열에 도달하는 순서대로 해제된다. 이러한 접근 방법은 처리를 위해 일정이 잡히기 전에, 대기하는 다른 연결과 비교해서 개별 연결이 지나치게 오랫동안 기다리지 않을 가능성을 더 높게 만든다. 본 발명의 발명 개념으로부터 벗어남이 없이 각 연결 상태를 지시하는 대기열의 구성요소와 함께 상태 변수를 나타내는 것과 같이 본 처리를 구현하기 위해 있는 2단 대기열에 다른 메커니즘을 사용하는 것은 당업자에게 자명한 사항이다.
단계(115)의 시험이 부정적인 응답을 가지면(즉, 작업자 스레드에 할당된 연결 대기가 없으면), 제어권은 작업자 스레드를 차단하는 단계(120)로 이동한다. 그 후 도 3a의 프로세스는 작업자 스레드를 종료시킨다. 작업자 스레드는 도3b의 단계(210), 또는 도3c의 단계(270) 이후에 기술된 로직에 따라서 해제된다.
상기 첫 번째 바람직한 실시예에서, 차단된 작업자 스레드는 대기열에 계속 남아있고, 이것은 '차단된 스레드 대기열(blocked thread queue)'이라고 불릴 수 있다. 바람직하게는, 이 대기열은 후입 선출(LIFO) 대기열로 구현된다. 새 페이지를 메모리로 옮길 때 페이지를 대체하기 위한 페이징 메커니즘으로 최소 최근 사용 구조를 사용한다고 가정하면, 차단 스레드를 LIFO 대기열에 놓음으로써, 스레드가 해제될 때 스레드의 페이지가 여전히 메모리에 상주해 있을 가능성이 높아진다. 단계(120)에서 차단된 스레드는 차단된 스레드 대기열의 머리 부분에 배열된다.
단계(115)의 시험에서 연결이 준비되어 있으면 제어권은 단계(125)에 도달한다. 그 후 이 연결은 이제 작업자 스레드에 할당된다. 연결의 데이터 요구를 가지고 있는 소켓 구조는 준비 대기열에서 가져와서 스레드에 전달한다.
단계(130)는 현재 시간을 스레드가 상기 연결 처리를 시작했음을 나타내는시간으로 기록하고, 단계(135)는 실행 스레드의 계수기를 증가시킨다. 이것은 실행 통계치 수집을 가능하게 하고, 나중에 경험적 지식으로 스케줄링하는데 사용되게 한다. 그 후 도3a의 프로세스는 종료된다.
작업자 스레드가 수동 소켓에서 수용과 수신 API를 실행할 경우, 그것은 도3a의 처리를 호출하는 상기 API 호출의 실행이다. 그러나 도3a는 이 API와 함께 사용하는 것에 제한되지 않으므로, 그 로직은 (예를 들면, 유사한 수용 연결 기능을 위한 함수 호출을 실행함으로써) 다른 방법으로 호출될 수 있다.
도3a에 의해서 작업자 스레드에 할당된 연결은 본 발명의 일부를 구성하지 않는 기술에 따라서 처리된다. 처리가 완료되면, 스레드는 도3a의 프로세스를 사용해서 (예를 들어, 서버가 중단되지 않으면) 다른 연결을 다시 요구할 것이다.
도 3b는 수동 소켓에 도달한 입력 패킷을 처리하기 위해 네트워크 입출력 인터럽트 핸들러와 같은 프로세스에 의해 실행되는 로직을 나타낸다.
프로세스는 단계(150)에서 시작하여 입력 패킷을 수신한다. 단계(155)는 이 패킷이 새로운 연결을 요구하는 것인지를 시험한다. 대답이 긍정이면 제어권은 단계(160)로 이전되고, 그렇지 않으면 제어권은 단계(180)로 이전된다.
단계(160)에서 알려진 기술을 사용해서 새 소켓을 생성하여, 새 소켓 데이터 구조가 생성된다. 단계(165)에서 수동 소켓을 위해 '대기중인 연결(pending connections)' 대기열에 상기 연결을 위한 엔트리를 놓는다.
단계(170)에서 이 수동 소켓 상의 연결이 자동으로 수용되는지 시험한다. 구성 파라미터가 상기 정보를 표시하는데 사용될 수 있다. 수신 연결 요구를 자동으로 수용함으로써, 작업자 스레드에 대한 요구의 스케줄링이 데이터가 도착할 때까지 지연된다. 이 시험 결과가 부정적인 응답이면, 이 실시예의 2단 대기열은 사용되지 않는다. 이것은 본 발명의 다른 특징들을 구현할 수 있는 기존의 구현들과 호환성을 갖는다. 연결은 대기 중인 연결 대기열에 그대로 남는다. 그렇지 않으면 단계(175)에서 승인 통지가 클라이언트에게 전송된다. 그 후 제어권은 다음 입력 패킷을 기다리는 단계(150)로 되돌려진다.
단계(180)는 수신 패킷이 연결을 확인한 것이었는지를 묻는다. 긍정이면, 단계(185)에서 연결을 '수용됨'으로 표시한다. 본 바람직한 실시예의 2단 대기열을 사용하면, 이것은 본 연결을 위해서 엔트리가 '대기중인 연결' 대기열에서 두 단계중 첫 번째인 '수용된 연결' 대기열로 이동하는 것을 포함한다. 그 후 제어권은 다음 수신 패킷을 기다리는 단계(150)로 되돌려진다.
수신 패킷이 연결 요구 또는 연결 확인이 아닐 경우 제어권은 단계(190)로 이전된다. 참조를 쉽게 하기 위해 도 3b에서 패킷을 데이터 패킷이라고 가정한다. 다른 패킷 종류는 도3b의 실행 순서에 속하지 않으므로 다루지 않는다. 당업자에게 본 발명의 발명 개념에서 벗어남이 없이 이들 패킷에 추가 로직이 추가될 수 있다는 것은 자명한 일이다. 단계(190)에서 이 데이터 패킷은 적합한 소켓의 인구속(inbound) 대기열에 놓인다. 단계(195)에서 본 연결에 이것이 제1 수신 데이터 패킷인지 결정할 시험을 한다. 그렇지 않으면, 인터럽트 핸들러는 (연결이 이미 작업자 스레드에 할당되어 있으므로) 이 패킷을 더 이상 처리하지 않고, 제어권은 단계(150)로 되돌려진다.
단계(200)에서 수용된 연결을 위한 제1 데이터 패킷이 도착한다. 따라서 이 연결은 작업자 스레드에 스케줄링이 가능하게 만들 수 있다. 상기 바람직한 실시예의 2단 대기열을 사용하면, 단계(200)의 처리는 연결이 '수용된 연결' 대기열(단계 1)에서 '준비(ready)' 대기열(단계 2)로 이동되는 것을 포함한다.
단계(205)에서 연결을 처리하기 위해 대기중인 스레드를 해제할 것인지, 아니면 현재 실행 중인 스레드가 끝날 때까지 기다릴 것인지(즉, 연결을 현재 준비 대기열에 그대로 둠)를 결정하는데 본 발명에서 정의한 새로운 스케줄링에 관한 경험적 지식이 사용된다. 경험적 지식의 결과가 차단된 스레드를 해제해야 하는 것으로 표시하면, 제어권은 단계(210)로 이전된다(단계(205)에서 '깨움' 분기를 따라감). 그렇지 않으면, 연결을 처리하기 위해 대기 스레드를 해제하는 것이 필요하지 않거나 바람직하지 않으므로, 인터럽트 핸들러는 이 시점에서 처리를 계속하지 않고 제어권을 단계(150)로 되돌린다(단계(205)에서 '대기' 분기를 따라감).
단계(205)에서 수행되는 경험적 지식에 의한 스케줄링은 아래의 수학적 표현에 의해 정의된다.
R = (C * T * D) - (T / 2)
경험적 지식에 의한 스케줄링의 목적은 현재 수신 작업 부하에 대한 작업자 스레드 수의 균형을 잡는 것이다. 과잉 스케줄링이 발생하지 않으면 최적의 결과가 달성된다. 이것을 위해서, 수신 준비 대기열에 항상 작은 백로그(backlog)가 남아있어야 한다(즉, 일부 연결이 대기열에 남아 있어야 하고, 작업자 스레드를 깨우는 방법으로 즉시 할당되어서는 안된다). 그러나 연결이 수용 가능한 소정의 짧은 지연 기간 이상으로 대기열에 남아있도록 허용해서는 안된다. 지연 기간의 끝부분에서도 사용 가능한 작업자 스레드가 없으면, 수용 가능한 지연을 초과하지 않기 위해 차단된 작업자 스레드를 깨운다. 바람직하게는, 지연 시간의 길이는 평균 수용 가능 지연과 최대 수용 가능 지연의 두 부분을 포함한다. 이들 지연 요인들의 값은 선택적으로 사용자에 의해 입력될 수 있는 구성 파라미터가될 수 있다. 구성 파라미터 값을 사용자가 입력하게 하는 방법은 당업자에게 잘 알려져 있으므로, 여기서 자세히 기술하지 않겠다. 일반적으로 구성 메뉴는 서버의 초기화 동안에 디스플레이 되고, 이들 파라미터들은 그 메뉴에 포함된다.
상기 식에서, R은 2단 대기열의 2단에서 준비 연결의 목표 수를 나타내며, 또한 '대기열 깊이(queue depth)' 또는 '대기열 백로그(queue backlog)'로 불릴 수 있다. 단계(205)의 시험에서 연결 개수가 R보다 크거나 같으면, 현재 너무 많은 연결이 이미 대기 중이므로 단계(210)로 제어권이 넘어가고, 대기 스레드는 해제된다. 대기열 깊이가 R보다 적으면 모든 연결은 대기열에 남아 있고, 실행 중인 스레드가 끝날 때를 기다린다. 모든 연결이 대기열에 남아 있으므로, 처리는 단계(150)로 되돌려진다.
경험적 지식으로 스케줄링하는 경우 변수 C는 매초당 하나의 작업자 스레드가 완료할 수 있는 연결의 평균 개수를 나타낸다. 이 변수의 값은 스레드의 실행 데이터를 모으는 방식으로 계산된다. 실행 데이터 수집은 도 3a의 앞부분에 기술된 처리에 따라서 수행된다. 서버 응용 프로그램이 얼마동안 실행될 때까지는 대표 데이터가 존재하지 않는다. 따라서 변수 C는 0으로 초기화되고, R = 0이므로제어권은 단계(205)에서 단계(210)(대기 스레드를 해제함)로 이전된다.
변수 T는 현재 실행중인 스레드 개수를 나타낸다. 따라서 1초에 완료되는 요구 수는 (C * T)이다. 예를 들면, 스레드가 평균 초당 8개의 요구를 완료하고, 현재 실행중인 스레드가 10개라면, 이들 스레드는 매초 평균 (8 * 10) = 80개의 요구를 완료할 수 있다.
변수 D는 한 개의 요구가 대기열에서 대기할 수 있는 평균 수용가능 지연 시간을 나타낸다. 지연 시간 D 동안에 새로운 연결이 스레드 풀에 흡수되는(즉, 연결이 작업자 스레드에 할당되는) 평균 비율은 (C * T * D)이다. 예를 들면, 평균 수용가능 지연 시간이 2초이면, (상기 예의 숫자를 사용하면) 이 지연기간 동안 이 숫자의 스레드에 의해 흡수될 수 있는 요구 개수는 16이다. 1초에 80개의 요구가 완료될 수 있으면, (8 * 10 * .2) = 16 개의 요구가 2초 안에 완료된다.
임의의 주어진 시간에서, 실행중인 스레드의 절반의 평균이 현재 요구를 완료하고 다른 것을 시작한다. 경험적 지식에 의한 스케줄링에 따르면 상기 평균이 (T/2)이다. 새로운 요구를 시작한 스레드들은 평균 완료 기간인 (1/(C/2))초 내에 새로운 요구를 가져오는 것은 실제로 불가능하기 때문에 이 값을 (C * T * D)에서 뺀다. 위의 예를 계속하면, 뺄 값은 (10/2) = 5이고, R의 최종값은 (16-5) = 11이다.
바꾸어 말하면, 이 예의 파라미터를 적절히 조정한 시스템은 실행 스레드가 완료될 때까지 기다리고, T = 10개의 스레드가 사용 가능하게 되면 새 요구를 할당하고, 요구는 평균값 D = .2초 보다 길게 대기열에 대기하지 않으므로 매 D = .2초마다 (C * T * D) - (T / 2) = 11개까지의 새 요구를 다룰 수 있다. 기간 D = .2초 동안에 평균 11개 이상의 새 요구가 도달하면, 시스템 용량이 초과되고 대기 스레드가 해제되어 임의의 요구가 D를 초과하는 지연을 갖지 않도록 해야만 한다.
본 실시예가 2단 대기열에서 연결의 스케줄링을 결정하는데 사용되는 새로운 경험적 지식에 의한 스케줄링을 기술하지만, 본 발명의 발명 개념에서 벗어남이 없이, 경험적 지식에 의한 스케줄링을 대기열 없이 사용할 수 있다. 즉, 수용되었지만 아직 데이터를 수신하지 않은 연결의 일정을 계획하는데 수동 소켓과 함께 이러한 경험적 지식이 사용되고, 도 3a에 기술된 바와 같이 모여진 통계값들이 제공된다. 이러한 접근 방법에서, 본 발명의 첫 번째 바람직한 실시예의 많은(전부는 아니지만) 장점들이 실현된다. 작업자 스레드에 대한 일부 연결을 클라이언트가 데이터를 연결에 전송하기 전에 단지 닫히도록 스케줄될 가능성이 남아 있다. 그러나 과잉 스케줄링은 완화될 것이다.
마찬가지로, 본 바람직한 실시예에서 정의된 2단 대기열은 새로운 경험적 지식에 의한 스케줄링의 사용 없이도 편리하게 사용된다. 그러한 환경에서, 어떠한 스케줄링 접근법이라도 각 연결을 제2 단에 도달하는 즉시 연결하는 것―심지어 작업자 스레드가 매번 해제되어야 하더라도―을 포함하는 제2 단에 연결을 위해 사용될 수 있다. 이러한 접근 방법이 스레드의 과잉 스케줄링을 가져오더라도, 과잉 스케줄링은 처리될 데이터 준비를 갖는 연결에 의해 제한된다.
단계(210)에서 대기 스레드는 해제된다. 이 스레드는 단계(215)에서 2단계 '준비' 대기열의 머리에 있는 요구를 처리하도록 할당된다. 제어권은 단계(150)로되돌려진다. 스레드를 해제하고 요구에 할당하는 방법은 당업자에게 잘 알려져 있고, 본 발명의 일부를 구성하지 않는다. 예를 들어, '대기'를 발행하여 스레드를 차단할 경우(도 3a의 단계(120)에서), 그 스레드는 '게시(POST)' 또는 '통지(NOTIFY)' 이벤트의 발행으로 해제될 수 있다. 대기를 야기하는 수용과 수신 API가 사용될 경우, 이 게시는 단일 스레드를 해제할 것이다. '수용과 수신'과 다른 API가 사용될 경우, 게시 명령이 발행되면 앞서 논의한 바와 같이 대기중인 모든 스레드가 해제된다.
도 3c는 작업자 스레드에 일정을 계획하기 전에 너무 오래 대기하는 연결이 확실히 없도록 하기 위해 지연 모니터에 의해 실행될 수 있는 로직을 예시한다. 이 로직은 주기적으로 실행되며, 타이머를 사용해서 호출된다.
프로세스는 '최대 지연' 타이머 만료 검사를 나타내는 단계(250)에서 시작한다. 이것이 단계(250)에서 반복 루프로 도시되었지만, 당업자는 이 검사에서 인터럽트가 발생하지 않는다는 것을 쉽게 알 것이다. 보통 '최대 지연' 기간의 타이머 프로세스는 스케줄링되고, 이것은 타이머가 주기적인 신호를 발생시키도록 만든다. 일단 최대 지연 기간이 만료되면, 타이머 프로세스를 위한 인터럽트가 생성되며, 단계(255-275)의 로직을 처리하도록 허가된다. 대안으로, 검사가 최대 지연 시간보다 더 많이 또는 더 적게 수행될 수 있으며, 그 경우에 단계(250)에서의 시험은 서로 다른 시간 간격을 반영한다.
단계(255)에서 2단의 '준비' 대기열이 비었는지 시험한다. 비었으면 너무 오래 대기중인 연결이 없으므로, 제어권은 단계(250)로 되돌려져서 다음 타이머 만료를 기다린다. 그렇지 않으면, 단계(260)에서 차단된 스레드 대기열이 비었는지 시험한다. 비었으면, 더 이상 사용 가능한 스레드가 없으므로, 준비 대기열의 엔트리를 검사하지 않는다. 제어권은 단계(250)로 되돌려진다. 단계(260)에서 부정적인 응답을 가지면, 대기열에 있는 연결은 너무 오래 대기중인 것이 있는지 검사된다. 단계(265-275)는 이 검사를 수행하는 반복 루프를 나타낸다. 단계(265)에서 대기열에서 가장 오래된 요구(대기열의 머리 부분을 지시하는 포인터에 의해 표시되는 연결)를 검사하여 최대 수용가능 시간보다 더 오래 대기중인지 검사한다. 긍정이면 단계(270)에서 대기중인 스레드를 해제하고, 단계(275)에서 그 스레드를 연결에 할당한다. 그 후 단계(265)로 되돌려진 연결에 의해 다음으로 오래된 연결이 검사된다. 준비 대기열이 FIFO 대기열을 사용해서 구현될 경우, 단계(265)에서의 검사는 부정적이고, 남아있는 대기열의 연결들은 최대 지연을 초과한 것이 없고 제어권은 단계(250)로 되돌려진다. (FIFO 대기열이 사용되지 않으면, 대기열의 끝에 이를 때까지 단계(265-275)를 반복하여 준비 대기열에 있는 각 엔트리를 검사할 필요가 있다.)
도 4는 앞서 논의한 다중 입력 소스 문제를 완화하는 제2 바람직한 실시예와 관련 있는 로직을 설명하는 순서도를 예시한다.
두 번째 바람직한 실시예는 콜렉터(collector) 소켓이라고 부르는 새로운 형태의 소켓의 정의에 기초를 두고 있다. 다중 수동 소켓에서 오는 입력은 콜렉터 소켓에서 병합되므로, 연결을 스레드에 스케줄링하는데 단일 소스가 이용 가능하다. 콜렉터 소켓은 첫번째 바람직한 실시예에서 기술된 2단 대기열의 두 번째 단인 '준비' 대기열을 갖는 것으로 구현되며, 여기서 첫번째 단인 '수용된 연결들' 대기열은 다중 수동 소켓과 함께 남아있다. 연결은 수용된 수동 소켓의 수용된 연결 대기열에 대기하고 있다가, 각 연결을 위한 첫번째 데이터 패킷이 도착하면 콜렉터 소켓의 준비 대기열로 이동한다.
도 5a는 콜렉터 소켓을 사용하기 위해 필요한 변경과 비교하기 위해 첫번째 바람직한 실시예의 2단 대기열을 개념적으로 도시한다. 도 5a에 수동 소켓(500)이 도시된다. 그와 같은 수동 소켓이 여러 개 있을 수 있는데 각각은 (1) 연결이 계속 대기중일 동안 소켓 구조를 계속 유지하는 대기중인 연결 대기열(502), (2) 연결이 수용된 후, 그리고 연결을 위한 첫번째 데이터 패킷이 도착하기 전 동안 소켓 구조를 계속 유지하는 수용된 연결 대기열(504), (3) 적어도 하나의 패킷이 도착한 후, 그리고 연결이 작업자 스레드에 스케줄링되기 전 동안 소켓 구조를 계속 유지하는 준비 연결 대기열(506)을 갖는다. 각 수동 소켓은 관련 있는 차단된 스레드 대기열(510)을 갖는데, 앞에서 논의한 기술에 따라서 이 대기열을 사용하여 연결을 스레드에 스케줄링한다.
반면에 도 5b는 콜렉터 소켓을 사용할 경우 수동 소켓과 어떻게 다른지를 예시한다. 세 개의 수동 소켓(530, 540, 550)은 도 5b에 자신들의 데이터를 하나의 콜렉터 소켓(560)에 병합하는 것(병합될 개수는 3으로 제한되지 않음)을 도시한다. 이제 각 수동 소켓(530, 540, 550)은 (1) 대기중인 연결 대기열(532, 542, 552), (2) 수용된 연결 대기열(534, 544, 554) 등 2개의 대기열을 포함한다. 준비 대기열(562)은 콜렉터 소켓(560)과 관련이 있다. 추가로, 각 수동 소켓(500)을 위해서차단된 스레드 대기열(510)을 갖는 대신에 단일 콜렉터 소켓(560)과 관련이 있는 단일의 차단된 스레드 대기열(570)이 있다. 도 5b에 도시한 것처럼, 연결이 수용된 연결 대기열(534, 544, 554)에서 이동할 경우, 그것들은 콜렉터 소켓(560)의 준비 대기열(562)로 이동한다.
콜렉터 소켓의 사용을 가능하게 하기 위해 추가 API가 필요하다. API의 목적은 어느 수동 소켓이 콜렉터 소켓에 병합되는지를 표시하기 위한 것이다. 따라서 API 호출은 모아질 수동 소켓의 목록을 제공한다. 바람직하게는, 상기 정보는 시스템 관리자와 같은 사용자가 수동 소켓 식별자를 특정하도록 프롬프트되는 경우 구성 파라미터를 사용하여 통신하게 된다. 본 발명의 발명 개념에서 벗어남이 없이 다른 방법들로 이 정보를 만드는 것도 가능하다. 이러한 식별자들은 두 번째 바람직한 실시예에서 이용 가능하게 된다. 사용자로부터 구성 파라미터를 얻는 방법과 실행 프로그램을 이용 가능하게 만드는 것은 당업자에게 명백하다. 따라서 자세히 기술하지 않는다. 가급적 API 호출은 서버가 동작을 시작할 때 발행될 것이다. 그러나 클라이언트가 서버에 요구의 송부를 시작하고 콜렉터 소켓이 구성될 때까지 소정의 시간 지연이 존재할 수 있다. 도 4는 이러한 상황을 해결하는데 사용될 수 있는 로직을 기술하는데, 수동 소켓의 준비 대기열로 이미 옮겨진 연결을 찾기 위해 수집된 수동 소켓을 검사한다. 이들 연결은 콜렉터 소켓의 준비 대기열로 옮겨진다. 도 4의 로직은 서버가 이미 실행을 시작한 후 콜렉터 API를 호출할 때도 사용될 수 있다.
단계(400)에서 API 호출 수신에 응답하여 콜렉터 소켓이 생성된다. 준비 대기열은 빈 대기열로 초기화된다. 경험적 지식에 의한 스케줄링을 위해 유지되던 통계치(앞서 기술됨)가 초기화되어, 콜렉터 소켓과 그 소켓을 사용한 스레드의 실행에 관한 통계치를 보지(保持)하기 시작한다. 차단된 스레드의 대기열이 콜렉터 소켓을 위해서, 그리고 그 소켓에서 연결을 처리하기 위해 사용될 스레드를 위해서 생성된다.
단계(410)에서 인덱스나 루프 계수기와 같은 포인팅 메커니즘을 사용하여, API 호출에서 제공한 목록에서 첫 번째 수동 소켓 식별자를 지시한다. 목록에 있는 엔트리에 색인을 다는 기술은 기지의 기술이므로 더 이상 설명하지는 않는다.
단계(420)에서 콜렉터 소켓을 지시하도록 수동 소켓을 수정한다. 이것은 콜렉터 소켓에 전달되는 데이터 패킷을 갖도록 연결이 추후에 수동 소켓에 데이터를 수신할 수 있게 해준다.
단계(430)에서 수동 소켓의 준비 대기열을 검사하여 이 연결이 이미 그 준비 대기열로 옮겨졌는지를 확인한다. 위에 기술한 바와 같이 수용된 연결을 위한 첫 번째 데이터 패킷은 콜렉터 소켓이 생성되기 전에 도착할 수 있고, 단계(430)에서 그와 같은 연결이 콜렉터 소켓의 준비 대기열로 이동하는 것을 준비한다. 엔트리를 대기열에서 제거하고, 엔트리를 대기열에 위치시키는 기술은 잘 알려진 기술이다.
단계(440)에서 포인터가 목록의 마지막 구성요소를 지시하고 있는지 검사함으로써, 콜렉터 API에 정의된 모든 수동 소켓이 처리되었는지 검사한다. 이 검사에서 긍정적인 응답이 있으면 도 4의 처리가 종료된다. 그렇지 않으면 단계(450)에서 다음 수동 소켓을 표시하도록 포인터가 증가하고, 제어권은 단계(420)로 되돌려진다.
작업자 스레드가 콜렉터 소켓 준비 대기열에서 작업을 수신하는 처리 로직은 수동 소켓 준비 대기열에서 작업을 수신하는 스레드를 위한, 도 3a에 도시한 프로세스와 동일하다. 그러나 도3a의 설명과 다른 다음과 같은 차이점들은 존재한다. (1) 유지되는 통계치들은 콜렉터 소켓을 위해서 유지된다. (2) 차단된 작업자 스레드의 대기열은 작업자 소켓과 관련된 대기열이다. (3) 검사되는 준비 대기열은 콜렉터 소켓의 준비 대기열이다. (4) 작업자 스레드는 콜렉터 소켓에서 수용과 수신 API를 실행한다.
상기 바람직한 실시예를 위해서 수동 소켓에서 입력 패킷의 수신을 다루는 처리 로직은 도 3b에 도시한 로직과 유사하다. 그러나 약간의 변경이 필요하다. 단계(195)에서 콜렉터 소켓에 병합되는 수동 소켓을 위한 첫 번째 데이터 패킷의 도착을 검출한 후(즉, 단계(195)에서 '예(Yes)'이면), 연결은 수동 소켓의 준비 대기열 대신에 콜렉터 소켓의 준비 대기열로 옮겨진다. 단계(205)에서 경험적 지식에 의한 스케줄링에 사용되는 통계치는 콜렉터 소켓의 것이다. 단계(210)에서 깨운 스레드는 콜렉터 소켓과 관련 있는 차단된 스레드 대기열의 스레드이다.
스케줄링하기 전에 너무 오래 기다리는 연결이 없도록 하기 위해 콜렉터 소켓의 준비 연결 대기열을 감시하는 처리 로직은 도 3c에 도시한 로직과 동일하다. 그러나 도 3c의 설명과 다른 다음과 같은 차이점들은 존재한다. (1) 검사되는 준비 연결 대기열은 진술된 것처럼 콜렉터 소켓의 것이다. (2) 검사되는 차단된 스레드 대기열은 콜렉터 대기열과 관련 있는 것이다. (3) 단계(270)에서 깨우는 스레드는 콜렉터 소켓과 관련 있는 차단된 스레드 대기열에 있는 것이다.
연결이 도착한 수동 소켓을 표시하는 정보는 수동 소켓에서 콜렉터 소켓으로 옮겨진 것과 같이 (도 3a를 참조하여 설명한 것처럼) 수용된 연결과 같이 전달되어야만 한다. 이것은 다른 소스로부터의 입력을 위해서는 다른 처리가 필요하다는 사실 때문이다. 예를 들어, 보안 연결 요구가 수동 소켓에 도착하면, 비보안 연결 요구가 도착했을 때는 필요하지 않았을 보안 관련 처리가 작업자 스레드에게 필요하게 된다. 연결이 SSL-인에이블형 수동 소켓에 도착하면, 상기 추가 처리는 핸드 쉐이킹(handshaking) 프로토콜을 포함한다. 추가 처리는 본 발명의 일부를 구성하지 않는다. 본 발명의 발명 개념으로부터 벗어남이 없이, 표시되는 연결 소스에 따라 정보를 전달하는데 여러 가지 방법이 사용될 수 있다. 예를 들어, 연결은 정보의 다양한 형태를 갖고 연결에 배치하는 기억장치를 가지며, 이것은 기지의 기술이다. 입력 소켓의 식별자를 저장하기 위해 이 데이터 영역에 파라미터가 추가될 수 있다. 소스와 관련된 어떤 처리가 필요한지 판단하기 위해 각각의 작업자 스레드는 이 데이터를 검사하는 로직을 포함한다. 이것은 풀에서 나온 어떤 스레드도 임의의 다중 수동 소켓에 도착한 연결을 처리할 수 있게 한다. 따라서 정적 분할을 사용해서 수동 소켓에 작업자 스레드를 배분하는 것은 더 이상 필요하지 않다. 이러한 실시예는 콜렉터 소켓의 준비 대기열에 병합된 다양한 입력 소스를 가지므로 다양한 입력 소스에 대한 풀의 능동 분할을 달성한다.
콜렉터 소켓의 준비 대기열의 요구를 스케줄 하기 위해 첫 번째 바람직한 실시예에서 정의된 경험적 지식에 의한 스케줄링을 사용하는 것은 두 번째 바람직한 실시예에서 선택 사항이다. 경험적 지식에 의한 스케줄링을 사용하면 과잉 스케줄링 문제를 막는 것이 가능하지만, 사용하지 않으면 콜렉터 소켓에서 연결 부하가 사용 가능한 스레드 수보다 적을 경우가 생긴다.
도 6a-6b는 앞서 논의한, 스레드를 영구적 연결에 할당하는 문제를 완화하는 세 번째 바람직한 실시예와 관련이 있는 로직을 설명하는 순서도를 예시한다.
세 번째 바람직한 실시예는 두 번째 바람직한 실시예에 따라 정의된 콜렉터 소켓의 사용을 필요로 한다. 영구적 연결이 사용될 경우 콜렉터 소켓의 처리를 더 효율적으로 다룰 수 있는 방안이 정의된다. 도 5b에 도시된 준비 대기열에 추가하여, 콜렉터 소켓은 '유휴 연결(idle connections)' 대기열도 갖는다. 추가 API를 정의하고, '기득권 반환(giveback)' API라고 부른다(이하 기술됨).
작업자 스레드가 작업을 콜렉터 소켓 준비 대기열에서 수신하는 처리 로직은 두 번째 바람직한 실시예에서 기술된 프로세스(도 3a 참조)와 동일하다.
세 번째 바람직한 실시예를 위해 수동 소켓에 입력 패킷의 수령을 처리하는 로직은 앞서 설명한 두 번째 바람직한 실시예(도 3b 참조)와 유사하다. 그러나 약간의 변경이 필요하다. 단계(155)에서 입력 연결 요구가 검출된 후에, 단계(160)에서 생성된 새로운 소켓은 초기화된 두 개의 추가 데이터 값을 필요로 한다. 첫째로, 소켓 상태가 '준비 안됨(Not Ready)'을 지시하도록 설정되고(즉, 이 연결은 현재 스케줄링을 위해 준비되지 않음). 둘째로, 응용 프로그램 문맥은 널 값으로 설정되어야 하는데, 이것은 이 연결과 관련하여 아직 문맥이 없음을 지적한다. 남은 변경은 연결을 위한 데이터가 도착했을 때 실행되는 처리에 속한다. 단계(195)에서 이것이 수신된 첫 번째 데이터 패킷인지 검사하는 대신에, 소켓이 '준비(Ready)'로 표시되었는지 아니면 '준비 안됨(Not Ready)'으로 표시되었는지 시험한다. 상태가 이미 '준비'로 설정되어 있으면 제어권은 단계(150)으로 되돌려 지고, 그렇지 않으면(즉, 상태가 '준비 안됨'이면) 계속해서 제어권은 단계(200)로 진행한다. 단계(200)에서 현재 도시하고 있는 처리 대신에, 새 처리는 (1) 소켓을 '준비'로 표시하고, (2) 소켓을 현재 대기열(수동 소켓의 수용된 대기열이거나 또는 콜렉터 소켓의 유휴 대기열 중 하나임)에서 콜렉터 소켓의 준비 대기열로 옮기는 것을 포함한다.
스케줄링 하기 전에 너무 오래 기다리는 연결이 없도록 하기 위해 콜렉터 소켓의 준비 연결 대기열을 감시하는 처리 로직은 도 3c에 도시한 로직과 동일하다. 두 번째 바람직한 실시예를 위해 설명된 도3c와 다른 점은 세 번째 바람직한 실시예에 속한다.
도 4를 참조하여 두 번째 바람직한 실시예에 기술한 바와 같이 콜렉터 소켓을 생성할 경우, 하나의 추가 변경이 필요하다. 콜렉터 소켓이 단계(400)에서 설정될 경우, 빈 유휴 연결 대기열이 반드시 생성된다.
도 6a는 응용 프로그램에 의해 새로운 기득권 반환 API의 발행에 대한 응답으로 호출되는 로직을 예시한다. 이 API 호출은 작업자 스레드에 할당됐었던 (그래서 이미 데이터를 수신한) 소켓이 스레드에서 분리되어 다른 연결에 할당될 수 있게 한다. 이 API는 영구적 연결이 입력 데이터 요구들 사이에서 지연을 경험할때(소정의 임계값을 초과할 때) 호출된다.
단계(600)에서 미판독 데이터가 이 연결에 이용 가능한지 묻는다. 기득권 반환 API가 프로세스에 있는 것처럼 데이터도 도착했을 것이다. 이 조건이 참이면, 제어권은 단계(650)로 옮겨진다. 그렇지 않으면, 단계(610)에서 연결을 유휴 대기열로 옮기는 프로세스가 계속된다.
단계(610)에서 소켓을 '준비 안됨'으로 표시하고, 소켓을 위한 엔트리를 유휴 연결 대기열에 놓는다. 계수기의 유휴 연결 수가 증가된다. 이 연결과 관련 있는 응용 프로그램 문맥 값인 API의 입력 파라미터는 소켓이 유휴 대기열에 놓일 때 소켓에 저장된다. 이것은 데이터가 이어서 도착했을 때 동일한 소켓을 사용하여, 소켓이 다시 처리를 시작하게 만든다.
단계(620)에서 유휴 연결 계수기의 현재 값은 최대값(구성 파라미터로 설정되거나 정적 값으로 설정될 수 있음)과 비교된다. 이 시험이 긍정적인 응답을 가지면, 너무 많은 연결이 유휴상태에 있고, 가장 오래된 것은 제어권을 단계(630)으로 보내므로 제거된다. 그렇지 않고 최대값을 초과하지 않으면 도 6a의 프로세스는 종료된다.
단계(630)에서, 유휴 연결 대기열에 있는 가장 오래된 연결은 반드시 제거된다. 가급적 유휴 연결 대기열은 FIFO 대기열이므로, 단계(630)는 대기열의 머리 지시를 포함한다. 이 연결이 닫히고, 사용되던 자원은 자유롭게 된다. 단계(640)에서 이 프로세스를 시작하고, 소켓에 '만료(Expired)'라고 표시하므로 유휴 대기열에서 제거한다. 유휴 연결의 계수는 감소되고, 단계(650)에서 소켓은 준비 대기열로 옮겨진다. 연결이 준비 대기열에서 작업자 스레드로 스케줄될 경우, 닫힌 프로세스는 그 작업자 스레드에 의해 완료된다. 단계(660-680)를 통해서 첫 번째 바람직한 실시예에서 기술했던 경험적 지식에 의한 스케줄링을 실시하며, 여기서 연결은 해제된 스레드로 스케줄링되든지, 아니면 바쁜 스레드가 사용 가능하게 되어 스케줄링될 때까지 대기하고 콜렉터 소켓의 준비 대기열을 검사한다(도 3a의 수정된 프로세스 사용). 단계(660)에서 스레드가 일정 계획을 위해 대기하는 것을 지시하거나, 또는 연결을 해제된 스레드에 할당하는 단계(680)를 마치면, 도 6a의 처리가 완료된다.
기득권 반환 API의 사용으로 콜렉터 소켓의 유휴 연결 대기열에 위치된 연결은 다음 중 하나의 조건을 만날 때까지 그곳에 남는다. (1) 추가 데이터 도착; (2) 클라이언트에서 연결 닫기 요구 수신; (3) 연결이 최대 시간 전까지 유휴 상태로 남아있음; 및 (4) 유휴 연결 수가 너무 커짐. 조건 1에서, 연결을 유휴 대기열에 계속 있게 하는 것은, 첫 번째 데이터 요구를 수신할 때 연결의 스케줄링을 위해 일반적으로 수행되는 초기화 단계 없이, 연결이 이어지는 작업자 스레드에 할당되도록 허용한다. 세 번째 바람직한 실시예를 위해 위에 기술된 도 3b의 수정 로직은 이 추가 데이터의 도착을 감지하고, 연결의 재 스케줄링을 처리한다. 조건 4는 도 6a의 단계(620-680)로, 이미 기술된 프로세스이다. 조건 2와 3은 아래에서 더 자세히 기술된다.
조건 2에서, 클라이언트가 연결을 닫으라고 요구하면, 연결은 콜렉터 소켓의 유휴 연결 대기열에서 준비 대기열로 옮겨진다. 이것은 연결이 유휴 상태로 남아있는 동안 응용 프로그램 문맥이 연결을 위해 보관되었기 때문이며, 이제 작업자 스레드에 의해 닫혀질 필요가 있다. 연결은 도 3b의 단계(200)에서 수정된 로직을 사용하여 준비 대기열로 옮겨질 것이다.
조건 3에서, 연결이 유휴 상태로 너무 오래 있으면, 도6b의 처리가 사용된다. 첫 번째, 두 번째 바람직한 실시예에서 임의의 연결이 준비 대기열에서 너무 오래 있었는지 검사하기 위해 사용된 지연 감시기는 상기 세 번째 실시예에서도 위에 기술된 대로 여전히 사용된다. 그러나 유휴 연결 대기열을 감시하는 추가 감시 절차가 또한 사용되며, 그것은 도 6b에 예시된다.
도 6b의 처리는 소정 간격을 두고 호출되는데, 그것은 구성 파라미터일 수 있다. 타이머는 이 호출을 야기하는데 사용될 수 있다. 단계(700)에서 가장 오래된 유휴 소켓을 유휴 대기열에서 얻는다. 전술한 바와 같이, 유휴 연결 대기열은 바람직하게는 FIFO 대기열이므로, 단계(700)는 대기열의 머리 부분 지시를 포함한다. 단계(710)에서 이 연결이 너무 오래동안 유휴 상태로 남아있는지를 검사한다. 각 연결은 기득권 반환 API에 시간 만료 파라미터를 포함함으로써, 정의된 자기 자신의 최대 유휴 기간을 가질 수 있다. 이 파라미터 값은 연결의 엔트리와 함께 유휴 대기열에 저장될 수 있다. 대신에 각 연결을 위해 구성 중에 값을 정해줌으로써 동일한 최대 유휴 시간이 사용될 수 있다.
연결이 최대 유휴 시간에 도달하지 않으면 제어권은 단계(720)로 진행한다. 따라서 연결은 유휴 대기열에 남아 있도록 허용된다. 단계(720)는 연결이 유휴 연결 대기열에서 마지막 연결인지 묻는다. 긍정이면 더 이상 검사할 연결이 없으므로 도 6b의 프로세스는 종료된다. 그렇지 않으면 단계(730)는 대기열의 다음 연결을 지시하고 제어권은 이 연결을 검사하기 위해 단계(710)으로 되돌려진다.
연결이 최대 유휴 시간 이상 유휴 상태에 있는 것으로 검사되면, 제어권은 단계(740)로 진행한다. 전송할 데이터가 없는데도 연결을 위해서 관련 있는 시스템 자원들이 계속 열려있게 함으로써 시스템 자원이 효휼적으로 사용되지 않으므로, 연결은 닫히고 자원들은 자유롭게 된다. 단계(740)에서 이 프로세스가 시작되어, 소켓에 '만료' 표시를 하고, 유휴 대기열에서 제거한다. 유휴 연결 개수는 감소되고, 단계(750)에서 소켓은 준비 대기열로 옮겨진다. 연결의 일정이 계획되면, 닫기 프로세스는 작업자 스레드에 의해 완료될 것이다. 단계(760-780)는 첫 번째 바람직한 실시예를 위해 기술된 경험적 지식에 의한 스케줄링을 수행하는데, 연결은 해제 스레드로 일정이 계획되거나, 비지 스레드가 사용 가능하게 되어 스케줄링될 때까지 대기하고 콜렉터 소켓의 준비 대기열을 검사한다(도 3a의 수정된 프로세스 사용). 단계(760)에서 스레드가 일정 계획을 위해 대기할 것을 지시하든지, 또는 단계(780)에서 연결을 해제된 스레드에 대한 할당을 종료하면, 제어권은 유휴 대기열에 연결이 더 있는지 검사하는 단계(720)로 되돌려진다.
본 발명의 바람직한 실시예를 기술하였지만, 기본적인 발명 개념에 따라 당업자는 그 실시예에 추가 변화와 수정을 가할 수 있다. 그러므로 첨부한 청구항은 바람직한 실시예와 본 발명의 정신과 범위 내에서 가능한 모든 변화와 수정을 포함하여 해석되어야한다.
본 발명은 연결을 위한 다수의 클라이언트 요구, 다수의 작업자 스레드, 상기 다수의 클라이언트 요구를 수신하기 위한 서브 프로세스, 작업자 스레드의 과잉 스케줄링을 완화하기 위해 경험적 지식으로 스케줄링을 구현하여 네트워크에 연결된 컴퓨터 계산 환경에서 다중 스레디드 응용 프로그램의 성능을 향상시킨다.

Claims (32)

  1. 네트워크에 연결된 컴퓨팅 환경에서 다중 스레디드 응용 프로그램의 성능 향상을 위한 컴퓨터 판독 가능한 코드를 저장하는, 컴퓨터 시스템에 의해 판독 가능한 기록 매체에 있어서, 상기 코드는,
    연결을 위한 복수의 클라이언트 요구와,
    복수의 작업자 스레드와,
    상기 복수의 클라이언트 요구를 수신하는 서브 프로세스와,
    상기 작업자 스레드의 과잉 스케줄링을 완화하기 위해 경험적 지식에 의한 스케줄링을 구현하는 서브 프로세스를 포함하는 것인 컴퓨터 시스템에 의해 판독 가능한 기록 매체.
  2. 제1항에 있어서,
    상기 작업자 스레드의 첫 번째 그룹은 활성 스레드이고, 상기 첫 번째 그룹은 상기 복수의 작업자 스레드 중 변경 가능한 활성 스레드들로 구성되고, 또한 이 그룹은 상기 변경 가능한 활성 스레드들의 변경 가능한 수를 가지고, 상기 변경 가능 수는 적어도 1이며,
    경험적 지식에 의한 스케줄링을 구현하기 위한 상기 서브 프로세스는 하나 또는 그 이상의 상기 복수의 클라이언트 요구를 포함하는 현재 작업 부하에 대한 상기 첫 번째 그룹에서 상기 변경 가능 수의 균형을 잡기 위한 서브 프로세스를 더 포함하는 것인 컴퓨터 시스템에 의해 판독 가능한 기록 매체.
  3. 제2항에 있어서, 균형을 잡기 위한 상기 서브 프로세스는 평균 지연의 사용을 더 포함하는 것인 컴퓨터 시스템에 의해 판독 가능한 기록 매체.
  4. 제3항에 있어서, 균형을 잡기 위한 상기 서브 프로세스는 최대 지연의 사용을 더 포함하는 컴퓨터 시스템에 의해 판독 가능한 기록 매체.
  5. 제4항에 있어서, 상기 평균 지연과 최대 지연은 구성 파라미터(configuration parameters)인 것인 컴퓨터 시스템에 의해 판독 가능한 기록 매체.
  6. 제2항에 있어서,
    상기 작업자 스레드의 두 번째 그룹은 차단된 스레드이고, 상기 두 번째 그룹은 상기 복수의 작업자 스레드 중 상기 첫번째 그룹에 속하지 않은 작업자 스레드들을 포함하며, 상기 차단된 스레드는 후입 선출 대기열에 저장되는 것인 컴퓨터 시스템에 의해 판독 가능한 기록 매체.
  7. 네트워크에 연결된 컴퓨팅 환경에서 다중 스레디드 응용 프로그램의 성능 향상을 위한 컴퓨터 판독 가능한 코드를 저장하는, 컴퓨터 시스템에 의해 판독 가능한 기록 매체에 있어서, 상기 코드는,
    연결들 각각이 수용될 때 대기중인 연결 대기열에서 첫번째 대기열로 상기 연결들을 옮기는 서브 프로세스와,
    상기 연결을 위한 초기 데이터 패킷이 도착했을 때 상기 연결들 각각을 상기 첫 번째 대기열에서 두 번째 대기열로 옮기는 서브 프로세스와,
    상기 두 번째 대기열에 있는 상기 연결 각각에 작업자 스레드를 할당하기 위한 서브 프로세스를 포함하는 것인 컴퓨터 시스템에 의해 판독 가능한 기록 매체.
  8. 네트워크에 연결된 컴퓨팅 환경에서 다중 스레디드 응용 프로그램의 성능 향상을 위한 컴퓨터 판독 가능한 코드를 저장하는, 컴퓨터 시스템에 의해 판독 가능한 기록 매체에 있어서,
    다중 소스에서 입력을 수신하는 서브 프로세스와,
    스케줄링을 위해 단일 대기열에 상기 수신된 입력을 병합하기 위한 서브 프로세스를 포함하는 것인 컴퓨터 시스템에 의해 판독 가능한 기록 매체.
  9. 제8항에 있어서, 상기 코드는,
    연결들 각각이 수용될 때 상기 연결들을 대기중인 연결 대기열에서 첫 번째 대기열로 옮기는 서브 프로세스와,
    상기 연결을 위한 초기화 데이터 패킷이 도착했을 때 상기 첫 번째 대기열에서 상기 단일 대기열로 상기 연결 각각을 옮기는 서브 프로세스와,
    상기 단일 대기열 상의 상기 연결 각각에 작업자 스레드를 할당하는 서브 프로세스를 더 포함하는 것인 컴퓨터 시스템에 의해 판독 가능한 기록 매체.
  10. 제9항에 있어서, 스케줄링을 위한 상기 서브 프로세스는,
    활성 작업자 스레드 그룹―여기서 활성 작업자 스레드 그룹은 복수의 작업자 스레드 중 변경 가능한 스레드들을 포함하고, 또한 이 그룹은 상기 변경 가능한 스레드들의 변경 가능한 수를 가지고, 상기 변경 가능 수는 적어도 1임―과,
    상기 단일 대기열 상에 저장된 상기 클라이언트 요구를 포함하는 현재 작업 부하에 대해 상기 활성 그룹 내에 있는 상기 변경 가능 수의 균형을 잡기 위해, 경험적 지식에 의한 스케줄링을 구현하기 위한 서브 프로세스를 더 포함하는 것인 컴퓨터 시스템에 의해 판독 가능한 기록 매체.
  11. 네트워크에 연결된 컴퓨팅 환경에서 다중 스레디드 응용 프로그램의 성능 향상을 위한 컴퓨터 판독 가능한 코드를 저장하는, 컴퓨터 시스템에 의해 판독 가능한 기록 매체에 있어서, 상기 코드는,
    복수의 영구적 연결과,
    복수의 작업자 스레드와,
    상기 작업자 스레드 중 선택된 스레드들에 상기 영구적 연결 중 선택된 연결들을 결합하기 위한 서브 프로세스―여기서 결합을 위한 상기 서브 프로세스의 실행을 통해 결합 연결이 만들어짐―과,
    상기 결합 연결 중 선택된 연결들을 결합 해제하는 서브 프로세스―여기서 결합 해제하는 상기 서브 프로세스를 실행을 통해 결합 해제 작업자 스레드가 만들어짐―를 포함하는 것인 컴퓨터 시스템에 의해 판독 가능한 기록 매체.
  12. 제11항에 있어서,
    결합을 위한 상기 서브 프로세스는 2단 대기열의 사용을 더 포함하고, 결합 해제를 위한 상기 서브 프로세스는 상기 2단 대기열의 사용을 더 포함하는 것인 컴퓨터 시스템에 의해 판독 가능한 기록 매체.
  13. 제12항에 있어서,
    상기 2단 대기열을 사용하는 결합을 위한 상기 서브 프로세스는,
    상기 연결을 위해 초기화 데이터 패킷이 도착할 경우 상기 영구적 연결 각각을 상기 제1단으로 옮기는 서브 프로세스와,
    상기 연결을 위한 데이터가 수신될 경우 상기 영구적 연결 각각을 상기 제2단에서 제1단으로 옮기는 서브 프로세스와,
    상기 제1단에서 상기 영구적 연결을 스케줄링하기 위한 서브 프로세스를 더 포함하고,
    상기 2단 대기열을 사용하는 결합 해제를 위한 상기 서브 프로세스는,
    상기 결합 연결 중 선택된 하나가 유휴 상태로 될 경우 상기 선택된 하나를 상기 제1단에서 상기 제2단으로 옮기는 서브 프로세스와,
    최대 유휴 기간이 초과되는 것에 응답하여, 상기 제2단에서 상기 영구적 연결 중 선택된 것을 차단하는 서브 프로세스와,
    결합을 위한 상기 서브 프로세스에 상기 결합 해제 작업자 스레드를 사용 가능하도록 만드는 서브 프로세스를 더 포함하는 것인 컴퓨터 시스템에 의해 판독 가능한 기록 매체.
  14. 제13항에 있어서, 결합 해제를 위한 상기 서브 프로세스는,
    유휴 연결의 최대 개수를 초과하는 것에 응답하여, 상기 제2단에서 상기 영구적 연결 중 추가로 선택된 것을 차단하기 위한 서브 프로세스를 더 포함하는 컴퓨터 시스템에 의해 판독 가능한 기록 매체.
  15. 네트워크에 연결된 컴퓨팅 환경에서 다중 스레디드 응용 프로그램의 성능 향상을 위한 시스템에 있어서,
    연결을 위한 복수의 클라이언트 요구와,
    복수의 작업자 스레드와,
    상기 복수의 클라이언트 요구를 수신하기 위한 수단과,
    상기 작업자 스레드의 과잉 스케줄링을 완화하기 위해 경험적 지식에 의한 스케줄링을 구현하는 수단을 포함하는 다중 스레디드 응용 프로그램의 성능 향상을 위한 시스템.
  16. 제15항에 있어서,
    상기 작업자 스레드의 첫 번째 그룹은 활성 스레드이고, 상기 첫 번째 그룹은 상기 복수의 작업자 스레드 중 변경 가능한 활성 스레드들로 구성되고, 또한 이 그룹은 상기 변경 가능한 활성 스레드들의 변경 가능한 수를 가지고, 상기 변경 가능 수는 적어도 1이며,
    경험적 지식에 의한 스케줄링을 구현하기 위한 상기 수단은 하나 또는 그 이상의 상기 다수의 클라이언트를 포함하는 현재 작업 부하에 대한 상기 첫 번째 그룹에서 상기 변경 가능 수의 균형을 잡기 위한 수단을 더 포함하는 것인 다중 스레디드 응용 프로그램의 성능 향상을 위한 시스템.
  17. 제16항에 있어서, 균형을 잡기 위한 상기 수단은 평균 지연의 사용을 더 포함하는 것인 다중 스레디드 응용 프로그램의 성능 향상을 위한 시스템.
  18. 제17항에 있어서, 균형을 잡기 위한 상기 수단은 최대 지연의 사용을 더 포함하는 것인 다중 스레디드 응용 프로그램의 성능 향상을 위한 시스템.
  19. 제18항에 있어서, 상기 평균 지연과 상기 최대 지연이 구성 파라미터(configuration parameters)인 것인 다중 스레디드 응용 프로그램의 성능 향상을 위한 시스템.
  20. 제16항에 있어서,
    상기 작업자 스레드의 두 번째 그룹이 차단된 스레드이고, 상기 두 번째 그룹이 상기 복수의 작업자 스레드 중 상기 첫 번째 그룹이 아닌 것들을 포함하며, 상기 차단된 스레드가 후입 선출 대기열에 저장되는 것인 다중 스레디드 응용 프로그램의 성능 향상을 위한 시스템.
  21. 네트워크에 연결된 컴퓨팅 환경에서 다중 스레디드 응용 프로그램의 성능 향상을 위한 시스템에 있어서,
    상기 연결들 각각이 수용될 때 대기중인 연결 대기열에서 첫 번째 대기열로 연결을 옮기는 수단과,
    상기 연결을 위한 초기 데이터 패킷이 도착했을 때 상기 연결 각각을 상기 첫 번째 대기열에서 두 번째 대기열로 옮기는 수단과,
    상기 두 번째 대기열에 있는 상기 연결 각각에 작업자 스레드를 할당하기 위한 수단을 포함하는 다중 스레디드 응용 프로그램의 성능 향상을 위한 시스템.
  22. 네트워크에 연결된 컴퓨팅 환경에서 다중 스레디드 응용 프로그램의 성능 향상을 위한 시스템에 있어서,
    다중 소스에서 입력을 수신하는 수단과,
    스케줄링을 위해 단일 대기열에 상기 수신 입력을 병합하기 위한 수단을 포함하는 다중 스레디드 응용 프로그램의 성능 향상을 위한 시스템.
  23. 제22항에 있어서,
    연결 각각이 수용될 때 상기 연결을 대기중인 연결 대기열에서 첫 번째 대기열로 옮기는 수단과,
    상기 연결을 위한 초기화 데이터 패킷이 도착했을 때 상기 첫 번째 대기열에서 상기 단일 대기열로 상기 연결 각각을 옮기는 수단과,
    작업자 스레드를 상기 단일 대기열 상의 상기 연결 각각에 할당하는 수단을 더 포함하는 것인 다중 스레디드 응용 프로그램의 성능 향상을 위한 시스템.
  24. 제23항에 있어서,
    활성 작업자 스레드 그룹은 복수의 작업자 스레드 중 변경 가능한 스레드들을 포함하고, 또한 이 그룹은 상기 변경 가능한 스레드들의 변경 가능한 수를 가지고, 상기 변경 가능 수는 적어도 1이며,
    상기 단일 대기열 상에 저장된 상기 클라이언트 요구를 포함하는 현재 작업 부하에 대한 상기 활성 그룹에서 상기 변경 가능 수의 균형을 잡기 위해 경험적 지식에 의한 스케줄링을 구현하기 위한 수단을 더 포함하는 것인 다중 스레디드 응용 프로그램의 성능 향상을 위한 시스템.
  25. 네트워크에 연결된 컴퓨팅 환경에서 다중 스레디드 응용 프로그램의 성능 향상을 위한 시스템에 있어서,
    복수의 영구적 연결과,
    복수의 작업자 스레드와,
    상기 작업자 스레드 중 선택된 스레드들에 상기 영구적 연결 중 선택된 연결들을 결합하기 위한 수단―여기서 결합을 위한 상기 서브 프로세스의 실행을 통해 결합 연결이 만들어짐―과,
    상기 결합 연결 중 선택된 연결들을 결합 해제하기 위한 수단―여기서 결합해제 하기 위한 수단의 실행을 통해 결합 해제 작업자 스레드가 만들어짐―을 포함하는 다중 스레디드 응용 프로그램의 성능 향상을 위한 시스템.
  26. 제25항에 있어서,
    결합을 위한 상기 수단은 2단 대기열 사용을 더 포함하고, 결합해제를 위한 상기 수단은 상기 2단 대기열 사용을 더 포함하는 것인 다중 스레디드 응용 프로그램의 성능 향상을 위한 시스템.
  27. 제26항에 있어서,
    상기 2단 대기열을 사용하는 결합을 위한 상기 수단은,
    상기 연결을 위해 초기화 데이터 패킷이 도착할 경우 상기 영구적 연결 각각을 상기 제1단으로 옮기는 수단과,
    상기 연결을 위한 데이터가 수신될 경우 상기 영구적 연결 각각을 상기 제 2단에서 제1단으로 옮기는 수단과,
    상기 제 1단에서 상기 영구적 연결을 스케줄링하기 위한 수단을 더 포함하고,
    상기 2단 대기열을 사용하는 결합 해제를 위한 상기 수단은,
    상기 결합 연결 중 선택된 하나가 유휴 상태로 될 경우 상기 선택된 하나를 상기 제1단에서 상기 제2단으로 옮기는 수단과,
    최대 유휴 기간이 초과된 것에 응답하여, 상기 제2단에서 상기 영구적 연결 중 선택된 연결을 폐쇄하기 위한 수단과,
    결합을 위한 상기 수단에 상기 결합 해제 작업자 스레드를 사용 가능하도록 만드는 수단을 더 포함하는 것인 다중 스레디드 응용 프로그램의 성능 향상을 위한 시스템.
  28. 제27항에 있어서, 결합 해제를 위한 상기 수단은,
    유휴 연결의 최대 개수를 초과한 것에 응답하여, 상기 제2단에서 상기 영구적 연결중 추가로 선택된 연결을 차단하기 위한 수단을 더 포함하는 것인 다중 스레디드 응용 프로그램의 성능 향상을 위한 시스템.
  29. 네트워크에 연결을 갖는 컴퓨팅 환경에서 다중 스레디드 응용 프로그램의 성능 향상을 위한 방법에 있어서,
    연결을 위한 복수의 클라이언트 요구 수신 단계와,
    상기 다수의 클라이언트 요구에 대한 다수의 작업자 스레드의 과잉 스케줄링을 완화하기 위해 경험적 지식에 의한 스케줄링을 구현하는 단계를 포함하는 다중 스레디드 응용 프로그램의 성능 향상을 위한 방법.
  30. 네트워크에 연결된 컴퓨팅 환경에서 다중 스레디드 응용 프로그램의 성능 향상을 위한 방법에 있어서 ,
    연결들 각각이 수용될 때 대기중인 연결 대기열에서 첫 번째 대기열로 상기 상기 연결을 옮기는 단계;
    상기 연결을 위한 초기 데이터 패킷이 도착했을 때 상기 연결들 각각을 상기 첫 번째 대기열에서 두 번째 대기열로 옮기는 단계; 및
    상기 두 번째 대기열에 있는 상기 연결 각각에 작업자 스레드를 할당하는 단계를 포함하는 다중 스레디드 응용 프로그램의 성능 향상을 위한 방법.
  31. 네트워크에 연결된 컴퓨팅 환경에서 다중 스레디드 응용 프로그램의 성능 향상을 위한 방법에 있어서,
    다중 소스에서 입력을 수신하는 단계와,
    스케줄링을 위해 단일 대기열에 상기 수신 입력을 병합하는 단계를 포함하는 다중 스레디드 응용 프로그램의 성능 향상을 위한 방법.
  32. 네트워크에 연결된 컴퓨팅 환경에서 다중 스레드 응용 프로그램의 성능을 향시키기 위한 방법에 있어서,
    복수의 작업자 스레드 중 선택된 것들에 복수의 영구적 연결 중 선택된 연결들을 결합하는 단계―여기서 결합하는 단계의 실행을 통해 결합 연결이 만들어짐―와,
    상기 결합 연결 중 선택된 연결들을 결합 해제하는 단계―여기서 결합 해제 단계의 실행을 통해 결합 해제 작업자 스레드가 만들어짐―를 포함하는 다중 스레디드 응용 프로그램의 성능 향상을 위한 방법.
KR1019990018127A 1998-06-12 1999-05-19 스레디드 서버의 성능을 향상시키기 위한 시스템 및 방법 KR100326990B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/097,282 1998-06-12
US09/097,282 US6427161B1 (en) 1998-06-12 1998-06-12 Thread scheduling techniques for multithreaded servers

Publications (2)

Publication Number Publication Date
KR20000005691A KR20000005691A (ko) 2000-01-25
KR100326990B1 true KR100326990B1 (ko) 2002-03-04

Family

ID=22262616

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019990018127A KR100326990B1 (ko) 1998-06-12 1999-05-19 스레디드 서버의 성능을 향상시키기 위한 시스템 및 방법

Country Status (3)

Country Link
US (2) US6427161B1 (ko)
JP (1) JP3555846B2 (ko)
KR (1) KR100326990B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10733554B2 (en) * 2016-02-12 2020-08-04 Fujitsu Limited Information processing apparatus and method for managing connections

Families Citing this family (130)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6353616B1 (en) * 1998-05-21 2002-03-05 Lucent Technologies Inc. Adaptive processor schedulor and method for reservation protocol message processing
US6859834B1 (en) * 1999-08-13 2005-02-22 Sun Microsystems, Inc. System and method for enabling application server request failover
US6754714B1 (en) * 1999-10-05 2004-06-22 Cisco Technology, Inc. Multilink point-to-point protocol network access server channel allocation method and apparatus
US7934251B2 (en) * 1999-12-02 2011-04-26 Western Digital Technologies, Inc. Managed peer-to-peer applications, systems and methods for distributed data access and storage
US7120692B2 (en) * 1999-12-02 2006-10-10 Senvid, Inc. Access and control system for network-enabled devices
US7587467B2 (en) * 1999-12-02 2009-09-08 Western Digital Technologies, Inc. Managed peer-to-peer applications, systems and methods for distributed data access and storage
US9191443B2 (en) * 1999-12-02 2015-11-17 Western Digital Technologies, Inc. Managed peer-to-peer applications, systems and methods for distributed data access and storage
US8793374B2 (en) * 1999-12-02 2014-07-29 Western Digital Technologies, Inc. Managed peer-to-peer applications, systems and methods for distributed data access and storage
US7917628B2 (en) * 1999-12-02 2011-03-29 Western Digital Technologies, Inc. Managed peer-to-peer applications, systems and methods for distributed data access and storage
US8688797B2 (en) * 1999-12-02 2014-04-01 Western Digital Technologies, Inc. Managed peer-to-peer applications, systems and methods for distributed data access and storage
EP1309901B1 (en) 1999-12-02 2008-05-21 Western Digital Technologies, Inc. System for remote recording of television programs
US7137115B2 (en) * 2000-01-25 2006-11-14 Fujitsu Limited Method for controlling multithreading
US8161182B1 (en) 2000-01-26 2012-04-17 Cisco Technology, Inc. Managing network congestion using dynamically advertised congestion status
US6658449B1 (en) 2000-02-17 2003-12-02 International Business Machines Corporation Apparatus and method for periodic load balancing in a multiple run queue system
US7069313B2 (en) * 2000-03-14 2006-06-27 Microsoft Corporation Methods and systems for preventing socket flooding during denial of service attacks
US6904459B1 (en) * 2000-03-14 2005-06-07 Microsoft Corporation Methods and systems for preventing socket flooding during denial of service attacks
US6874027B1 (en) * 2000-04-07 2005-03-29 Network Appliance, Inc. Low-overhead threads in a high-concurrency system
US6941379B1 (en) * 2000-05-23 2005-09-06 International Business Machines Corporation Congestion avoidance for threads in servers
US7140018B1 (en) * 2000-06-20 2006-11-21 International Business Machines Corporation Method of using a distinct flow of computational control as a reusable abstract data object
AU2001283134A1 (en) * 2000-08-03 2002-02-18 Prelude Systems, Inc. System and method for client-server communication
US6553406B1 (en) * 2000-08-03 2003-04-22 Prelude Systems, Inc. Process thread system receiving request packet from server thread, initiating process thread in response to request packet, synchronizing thread process between clients-servers.
US7475293B1 (en) 2000-08-04 2009-01-06 Sun Microsystems, Inc. Product check matrix
US7207046B1 (en) * 2000-08-23 2007-04-17 Agilent Technologies, Inc. Method and system for providing string-over-socket scripting language access to distributed object model interfaces
US6807572B1 (en) * 2000-08-31 2004-10-19 Intel Corporation Accessing network databases
US20020161814A1 (en) * 2000-10-04 2002-10-31 Wical Kelly J. Batch processing system running in parallel on automated and distributed replication systems
US20020055983A1 (en) * 2000-11-03 2002-05-09 The Board Of Regents Of The University Of Nebraska Computer server having non-client-specific persistent connections
US20020055982A1 (en) * 2000-11-03 2002-05-09 The Board Of Regents Of The University Of Nebraska Controlled server loading using L4 dispatching
US20030046394A1 (en) * 2000-11-03 2003-03-06 Steve Goddard System and method for an application space server cluster
US20020120716A1 (en) * 2000-12-22 2002-08-29 Balaji Raghunathan Server frame work for a database server
US7415025B1 (en) 2000-12-29 2008-08-19 Cisco Technology, Inc. Method and apparatus for clearing a large number of connections in an ATM network
US20020092012A1 (en) * 2001-01-09 2002-07-11 Shah Alexandre K. Smart-caching system and method
US7145913B2 (en) * 2001-02-15 2006-12-05 The Board Of Trustees Of The University Of Illinois Thread based scalable routing for an active router
KR100391513B1 (ko) * 2001-05-15 2003-07-12 주식회사 넷마블 멀티 스레드를 이용한 네트워크의 병목현상 감소 방법
US20030061257A1 (en) * 2001-09-25 2003-03-27 Javier Cardona Multithreaded universal daemon for network data exchanges
US20030069917A1 (en) * 2001-10-04 2003-04-10 Miller Larry J. Balanced client/server mechanism in a time-partitioned real-time operting system
US20030084164A1 (en) * 2001-10-29 2003-05-01 Mazzitelli John Joseph Multi-threaded server accept system and method
JP2003143153A (ja) * 2001-11-01 2003-05-16 Nec Corp サーバコンピュータ、そのコネクションクローズ方法及びプログラム
US7024481B2 (en) * 2001-11-01 2006-04-04 Microsoft Corporation Method and framework for processing network communication protocol timers
US20030172128A1 (en) * 2002-03-05 2003-09-11 Intel Corporation Dynamic asynchronous results
US7107596B2 (en) * 2002-03-14 2006-09-12 International Business Machines Corporation Statistically-triggered heuristics
JP3828444B2 (ja) * 2002-03-26 2006-10-04 株式会社日立製作所 データ通信中継装置及びシステム
US7299264B2 (en) * 2002-05-07 2007-11-20 Hewlett-Packard Development Company, L.P. System and method for monitoring a connection between a server and a passive client device
WO2003102758A1 (en) * 2002-05-31 2003-12-11 University Of Delaware Method and apparatus for real-time multithreading
KR100899527B1 (ko) * 2002-06-25 2009-05-27 주식회사 케이티 웹 서비스의 멀티쓰레드 운용 시스템 및 방법
US7043729B2 (en) * 2002-08-08 2006-05-09 Phoenix Technologies Ltd. Reducing interrupt latency while polling
US20040205753A1 (en) * 2002-08-16 2004-10-14 Globespan Virata Inc. Timing ring mechanism
US7272820B2 (en) * 2002-12-12 2007-09-18 Extrapoles Pty Limited Graphical development of fully executable transactional workflow applications with adaptive high-performance capacity
US7398518B2 (en) * 2002-12-17 2008-07-08 Intel Corporation Method and apparatus for measuring thread wait time
US7249355B2 (en) * 2002-12-18 2007-07-24 Microsoft Corporation Unified network thread management
US7237242B2 (en) * 2002-12-31 2007-06-26 International Business Machines Corporation Dynamic thread pool tuning techniques
US7207043B2 (en) * 2002-12-31 2007-04-17 International Business Machines Corporation Programmatic response-time based workload distribution techniques
US7415540B2 (en) * 2002-12-31 2008-08-19 Intel Corporation Scheduling processing threads
US7298753B1 (en) * 2003-02-10 2007-11-20 Cisco Technology, Inc. Technique for managing heavy signaling traffic that is directed to a particular signaling control unit
US7363626B2 (en) * 2003-03-24 2008-04-22 Sun Microsystems, Inc. Thread level application partitioning
US20040190494A1 (en) * 2003-03-26 2004-09-30 Bauer Samuel M. Systems and methods for voice quality testing in a non-real-time operating system environment
US7328438B2 (en) * 2003-03-27 2008-02-05 International Business Machines Corporation Deallocation of computer data in a multithreaded computer
US7467390B2 (en) * 2003-04-01 2008-12-16 International Business Machines Corporation Enhanced staged event-driven architecture
US7496915B2 (en) * 2003-04-24 2009-02-24 International Business Machines Corporation Dynamic switching of multithreaded processor between single threaded and simultaneous multithreaded modes
US20040252709A1 (en) * 2003-06-11 2004-12-16 Fineberg Samuel A. System having a plurality of threads being allocatable to a send or receive queue
US7373640B1 (en) 2003-07-31 2008-05-13 Network Appliance, Inc. Technique for dynamically restricting thread concurrency without rewriting thread code
US7690003B2 (en) * 2003-08-29 2010-03-30 Fuller Jeffrey C System and method for increasing data throughput using thread scheduling
EP1751745B1 (en) * 2003-11-14 2019-07-10 Western Digital Technologies, Inc. Managed peer-to-peer applications, systems and methods for distributed data access and storage
US8578380B1 (en) * 2003-12-17 2013-11-05 Vmware, Inc. Program concurrency control using condition variables
US7703101B2 (en) * 2004-02-13 2010-04-20 International Business Machines Corporation Autonomic workload classification using predictive assertion for wait queue and thread pool selection
GB0407388D0 (en) 2004-03-31 2004-05-05 British Telecomm Method and apparatus for communicating data between computer devices
US20050268300A1 (en) * 2004-05-14 2005-12-01 Microsoft Corporation Distributed task scheduler for computing environments
US7574439B2 (en) * 2004-05-20 2009-08-11 International Business Machines Corporation Managing a nested request
US7685575B1 (en) * 2004-06-08 2010-03-23 Sun Microsystems, Inc. Method and apparatus for analyzing an application
US7308083B2 (en) * 2004-06-30 2007-12-11 Glenayre Electronics, Inc. Message durability and retrieval in a geographically distributed voice messaging system
US20060004977A1 (en) * 2004-06-30 2006-01-05 Joefon Jann Autonomically tuning the virtual memory subsystem of a computer operating system
US20060015872A1 (en) * 2004-07-13 2006-01-19 Pohl William N Process management
US7844668B2 (en) 2004-07-30 2010-11-30 Microsoft Corporation Suggesting a discussion group based on indexing of the posts within that discussion group
US20060026593A1 (en) * 2004-07-30 2006-02-02 Microsoft Corporation Categorizing, voting and rating community threads
US8255933B2 (en) * 2004-08-12 2012-08-28 Telecom Italia S.P.A. Method and system for reading data, related network and computer program product therefor
US20060075404A1 (en) * 2004-10-06 2006-04-06 Daniela Rosu Method and system for scheduling user-level I/O threads
US20060085698A1 (en) * 2004-10-15 2006-04-20 Microsoft Corporation Synchronization mechanism for tools that drive UI-based applications
US7484217B2 (en) * 2005-02-24 2009-01-27 International Business Machines Corporation Method for automatic adjustment of time a consumer waits to access data from a queue during a waiting phase and transmission phase at the queue
DE102005008975A1 (de) * 2005-02-28 2006-08-31 Robert Bosch Gmbh Verfahren und Vorrichtung zur Überwachung einer Prozessausführung
US7823158B2 (en) * 2005-08-18 2010-10-26 International Business Machines Corporation Adaptive scheduling and management of work processing in a target context in resource contention
US7793299B2 (en) * 2005-08-30 2010-09-07 International Business Machines Corporation System and method for scheduling tasks for execution
US20070121822A1 (en) * 2005-11-01 2007-05-31 Victor Carnale Methods and apparatus to allow multiple clients to access a computer telephony interface server
US7962926B2 (en) * 2006-04-05 2011-06-14 International Business Machines Corporation Method, system, and program storage device for generating a retry message when a thread in a real-time application is unavailable to process a request to utilize the real-time application
GB0702587D0 (en) * 2006-05-05 2007-03-21 Omnifone Ltd Digital rights management
KR101208679B1 (ko) 2006-08-08 2012-12-06 삼성전자주식회사 소켓의 공유를 위한 네트워크 기기 및 그의 소켓 공유 방법
CA2557343C (en) * 2006-08-28 2015-09-22 Ibm Canada Limited-Ibm Canada Limitee Runtime code modification in a multi-threaded environment
US8839271B2 (en) * 2006-10-11 2014-09-16 International Business Machines Corporation Call stack sampling to obtain information for analyzing idle states in a data processing system
US8356284B2 (en) * 2006-12-28 2013-01-15 International Business Machines Corporation Threading model analysis system and method
US8020166B2 (en) * 2007-01-25 2011-09-13 Hewlett-Packard Development Company, L.P. Dynamically controlling the number of busy waiters in a synchronization object
US8219845B2 (en) * 2007-05-09 2012-07-10 Microsoft Corporation Timer service uses a single timer function to perform timing services for both relative and absolute timers
US8122449B2 (en) * 2007-09-07 2012-02-21 International Business Machines Corporation Determining whether to retain or terminate a thread based on a minimum number of threads in a thread pool and a maximum number of threads allowed waiting on the channel
US20090094614A1 (en) * 2007-10-05 2009-04-09 Microsoft Corporation Direct synchronous input
KR100959898B1 (ko) 2007-12-27 2010-05-27 주식회사 케이티 인터넷 서비스를 위한 부하 분산형 스케줄링 구조를 가지는서비스 서버 및 그 서비스 방법
US8489752B2 (en) * 2008-05-29 2013-07-16 Advanced Micro Devices, Inc. Method and system for controlling bus access
US8271659B2 (en) * 2008-09-04 2012-09-18 Oracle International Corporation Methods and systems for automatic removal and replacement of connections in a pool rendered stale by a firewall
JP5298974B2 (ja) * 2009-03-10 2013-09-25 株式会社リコー 機器管理装置、機器管理システム、機器管理方法、機器管理プログラム、及びそのプログラムを記録した記録媒体
US20110010716A1 (en) * 2009-06-12 2011-01-13 Arvind Raghuraman Domain Bounding for Symmetric Multiprocessing Systems
US8230078B2 (en) * 2009-08-18 2012-07-24 International Business Machines Corporation Accept and receive enhancements
CN102045251B (zh) * 2009-10-20 2012-08-22 国基电子(上海)有限公司 路由器及tcp端口防御方法
TWI397286B (zh) * 2009-10-28 2013-05-21 Hon Hai Prec Ind Co Ltd 路由器及tcp埠防禦方法
KR101644800B1 (ko) * 2010-01-07 2016-08-02 삼성전자주식회사 컴퓨팅 시스템 및 방법
US8745629B2 (en) * 2010-01-11 2014-06-03 Qualcomm Incorporated System and method of controlling power in an electronic device
US8756329B2 (en) 2010-09-15 2014-06-17 Oracle International Corporation System and method for parallel multiplexing between servers in a cluster
US8893134B2 (en) * 2011-04-13 2014-11-18 International Business Machines Corporation Locating bottleneck threads in multi-thread applications
US9086909B2 (en) * 2011-05-17 2015-07-21 Oracle International Corporation System and method for supporting work sharing muxing in a cluster
US9417935B2 (en) 2012-05-01 2016-08-16 Microsoft Technology Licensing, Llc Many-core process scheduling to maximize cache usage
US8726255B2 (en) 2012-05-01 2014-05-13 Concurix Corporation Recompiling with generic to specific replacement
US8595743B2 (en) 2012-05-01 2013-11-26 Concurix Corporation Network aware process scheduling
US8495598B2 (en) 2012-05-01 2013-07-23 Concurix Corporation Control flow graph operating system configuration
US8650538B2 (en) 2012-05-01 2014-02-11 Concurix Corporation Meta garbage collection for functional code
US9047196B2 (en) 2012-06-19 2015-06-02 Concurix Corporation Usage aware NUMA process scheduling
US8700838B2 (en) 2012-06-19 2014-04-15 Concurix Corporation Allocating heaps in NUMA systems
US9575813B2 (en) 2012-07-17 2017-02-21 Microsoft Technology Licensing, Llc Pattern matching process scheduler with upstream optimization
US8793669B2 (en) 2012-07-17 2014-07-29 Concurix Corporation Pattern extraction from executable code in message passing environments
US8707326B2 (en) 2012-07-17 2014-04-22 Concurix Corporation Pattern matching process scheduler in message passing environment
US9043788B2 (en) 2012-08-10 2015-05-26 Concurix Corporation Experiment manager for manycore systems
US9621667B2 (en) * 2012-08-27 2017-04-11 Adobe Systems Incorporated Streaming media with a server identified at runtime
US8607018B2 (en) 2012-11-08 2013-12-10 Concurix Corporation Memory usage configuration based on observations
US8656134B2 (en) 2012-11-08 2014-02-18 Concurix Corporation Optimized memory configuration deployed on executing code
US8656135B2 (en) 2012-11-08 2014-02-18 Concurix Corporation Optimized memory configuration deployed prior to execution
US9344451B2 (en) 2013-02-20 2016-05-17 Fastly, Inc. Enhanced thread handling in security handshaking
US20130219372A1 (en) 2013-03-15 2013-08-22 Concurix Corporation Runtime Settings Derived from Relationships Identified in Tracer Data
US8739151B1 (en) * 2013-03-15 2014-05-27 Genetec Inc. Computer system using in-service software upgrade
US9558035B2 (en) * 2013-12-18 2017-01-31 Oracle International Corporation System and method for supporting adaptive busy wait in a computing environment
US9753780B2 (en) 2015-07-07 2017-09-05 Sybase, Inc. Topology-aware processor scheduling
US10133496B1 (en) * 2016-06-15 2018-11-20 Amazon Technologies, Inc. Bindable state maintaining components
US10157085B2 (en) * 2017-02-17 2018-12-18 Sas Institute Inc. Techniques for decentralized load balancing
US10802878B2 (en) * 2017-03-31 2020-10-13 Bmc Software, Inc. Phased start and stop of resources in a mainframe environment
US11340955B2 (en) 2020-01-02 2022-05-24 International Business Machines Corporation Thread pool management for multiple applications
US11301335B2 (en) * 2020-03-04 2022-04-12 International Business Machines Corporation Database backup performance
KR102616610B1 (ko) * 2023-06-29 2023-12-27 (주)래셔널아울 동접 관리를 위한 소켓핸들링 및 멀티스레드 제어 장치및 방법

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0581163A (ja) 1991-09-19 1993-04-02 Nec Corp 情報処理システム
US6684261B1 (en) * 1993-07-19 2004-01-27 Object Technology Licensing Corporation Object-oriented operating system
JPH07152685A (ja) 1993-11-26 1995-06-16 Hitachi Ltd 分散編集制御方式
WO1996017306A2 (en) * 1994-11-21 1996-06-06 Oracle Corporation Media server
US5752031A (en) * 1995-04-24 1998-05-12 Microsoft Corporation Queue object for controlling concurrency in a computer system
JPH0944366A (ja) 1995-07-28 1997-02-14 Oki Electric Ind Co Ltd マルチスレッド・スケジューリング装置
JPH09198292A (ja) 1996-01-23 1997-07-31 Nec Corp 共用データの管理方式
US5826081A (en) * 1996-05-06 1998-10-20 Sun Microsystems, Inc. Real time thread dispatcher for multiprocessor applications
US6212573B1 (en) * 1996-06-26 2001-04-03 Sun Microsystems, Inc. Mechanism for invoking and servicing multiplexed messages with low context switching overhead
US6298386B1 (en) * 1996-08-14 2001-10-02 Emc Corporation Network file server having a message collector queue for connection and connectionless oriented protocols
GB2320112B (en) * 1996-12-07 2001-07-25 Ibm High-availability computer server system
GB2320594A (en) * 1996-12-20 1998-06-24 Ibm Dispatching client method calls to parallel execution threads within a server
US6173311B1 (en) * 1997-02-13 2001-01-09 Pointcast, Inc. Apparatus, method and article of manufacture for servicing client requests on a network
US6021470A (en) * 1997-03-17 2000-02-01 Oracle Corporation Method and apparatus for selective data caching implemented with noncacheable and cacheable data for improved cache performance in a computer networking system
US6075791A (en) * 1997-10-28 2000-06-13 Lucent Technologies Inc. System for guaranteeing data transfer rates and delays in packet networks

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10733554B2 (en) * 2016-02-12 2020-08-04 Fujitsu Limited Information processing apparatus and method for managing connections

Also Published As

Publication number Publication date
US6427161B1 (en) 2002-07-30
US6823515B2 (en) 2004-11-23
US20010018701A1 (en) 2001-08-30
JP3555846B2 (ja) 2004-08-18
JP2000029815A (ja) 2000-01-28
KR20000005691A (ko) 2000-01-25

Similar Documents

Publication Publication Date Title
KR100326990B1 (ko) 스레디드 서버의 성능을 향상시키기 위한 시스템 및 방법
Sha et al. A systematic approach to designing distributed real-time systems
US7246167B2 (en) Communication multiplexor using listener process to detect newly active client connections and passes to dispatcher processes for handling the connections
Arvind et al. A local area network architecture for communication in distributed real-time systems
US7873964B2 (en) Kernel functions for inter-processor communications in high performance multi-processor systems
US6223202B1 (en) Virtual machine pooling
US5327558A (en) Method for asynchronous application communication
US6799317B1 (en) Interrupt mechanism for shared memory message passing
Bangs et al. Better operating system features for faster network servers
US6212573B1 (en) Mechanism for invoking and servicing multiplexed messages with low context switching overhead
US20020156897A1 (en) Mechanism for servicing connections by disassociating processing resources from idle connections and monitoring the idle connections for activity
NZ236764A (en) Data transfer: task priority allocation
JPH076112A (ja) 少なくとも1つのユーザと少なくとも1つのサーバとの間の通信装置、該装置の使用方法及び該装置の使用
KR20040104467A (ko) 공통 작업 큐 환경에서의 최격적 서버
EP0871307A2 (en) Apparatus for flexible control of interrupts in multiprocessor systems
JP2004524600A (ja) 異種分散事業アプリケーション統合オブジェクトの集中管理提供システム及び集中管理提供方法
US7116635B2 (en) Process execution method and apparatus
US6704765B1 (en) System for allocating resources among agent processes
Ahuja et al. A multi-microprocessor architecture with hardware support for communication and scheduling
Sha et al. Distributed system design using generalized rate monotonic theory
Khelghatdoust et al. A scalable and low latency probe-based scheduler for data analytics frameworks
JP2000267960A (ja) プロセス間のパケット通信方法及びパケット通信装置
Schmidt et al. Half-Sync/Half-Async
JPH08106440A (ja) 分散共有メモリ計算機システム
JPS61143858A (ja) 複数のオペレ−テイングシステムの下におけるフアイルの共用方法

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20070205

Year of fee payment: 6

LAPS Lapse due to unpaid annual fee