16.6.2.7 memcached의 스레드 지원
memcached를 소스에서 빌드 할 때 내부의 스레드 구현을 사용하면 memcached는 libevent
시스템 이외에 여러 스레드를 사용하여 요청을 처리합니다.
사용하면 스레드 구현은 다음과 같이 작동합니다.
스레드는 코드의 함수를 래핑하여 같은 글로벌 구조의 동시 업데이트에서 보호하는 기본적인 기능을 제공함으로써 처리됩니다.
각 스레드는 자신의
libevent
인스턴스를 사용하여 성능을 향상시킵니다.TCP / IP 연결은 TCP / IP 소켓에서 대기하는 단일 스레드에 의해 처리됩니다. 그런 다음 각 연결은 간단한 라운드 로빈 방식으로 하나의 활성 스레드에 분배됩니다. 그 후, 접속이 열려있는 동안은 각 연결이 스레드 내에서만 작동합니다.
UDP 연결은 모든 스레드가 하나의 UDP 소켓에서 들어오는 요청을 기다립니다. 현재 다른 요청을 처리하지 않은 스레드는 들어오는 패킷을 무시합니다. 나머지 (통화 중이 아닌) 스레드 중 하나가 요청을 읽고 응답을 보냅니다. 이 구현은 요청을 처리 할 수있는 스레드가 절전 모드에서 복귀하기 위해 CPU 부하가 증가 할 가능성이 있습니다.
스레드를 사용하면 해시 테이블의 갱신 요청을 개별 스레드로 분산 할 수 있기 때문에 여러 개의 CPU 코어가 사용 가능한 서버에서 성능을 향상시킬 수 있습니다. 사용되는 잠금 메커니즘의 오버 헤드를 최소화하기 위해 다양한 스레드 값을 사용해 특정 워크로드의 요청 수와 유형을 기반으로 최적의 성능을 제공합니다.