16.2.2.8  memcached线程支持

如果您在从源代码 构建memcached 时启用了线程实现 ,那么除了系统之外, memcachedlibevent还会使用多个线程来处理请求。

启用后,线程实现操作如下:

  • 线程是通过在代码中包装函数来处理的,以提供基本的保护,防止同时更新相同的全局结构。

  • 每个线程都使用自己的 实例 libevent来帮助提高性能。

  • TCP/IP 连接由侦听 TCP/IP 套接字的单个线程处理。然后,每个连接都以简单的循环方式分配给其中一个活动线程。然后每个连接仅在该线程内运行,同时连接保持打开状态。

  • 对于 UDP 连接,所有线程都侦听传入请求的单个 UDP 套接字。当前未处理另一个请求的线程会忽略传入的数据包。剩余的非繁忙线程之一读取请求并发送响应。当线程从睡眠中唤醒以处理请求时,此实现可能会导致 CPU 负载增加。

使用线程可以提高具有多个可用 CPU 内核的服务器的性能,因为更新哈希表的请求可以分布在各个线程之间。为了最大限度地减少所采用的锁定机制的开销,请尝试使用不同的线程值,以根据给定工作负载中的请求数量和类型获得最佳性能。