MySQL 5.6 参考手册 / 第 16 章高可用性和可扩展性 / 16.2 将 MySQL 与 memcached 一起使用 / 16.2.2 使用内存缓存 /
16.2.2.8 memcached 线程支持
如果您在从源代码
构建memcached
时启用了线程实现
,那么除了系统之外, memcachedlibevent
还会使用多个线程来处理请求。
启用后,线程实现操作如下:
线程是通过在代码中包装函数来处理的,以提供基本的保护,防止同时更新相同的全局结构。
每个线程都使用自己的 实例
libevent
来帮助提高性能。TCP/IP 连接由侦听 TCP/IP 套接字的单个线程处理。然后,每个连接都以简单的循环方式分配给其中一个活动线程。然后每个连接仅在该线程内运行,同时连接保持打开状态。
对于 UDP 连接,所有线程都侦听传入请求的单个 UDP 套接字。当前未处理另一个请求的线程会忽略传入的数据包。剩余的非繁忙线程之一读取请求并发送响应。当线程从睡眠中唤醒以处理请求时,此实现可能会导致 CPU 负载增加。
使用线程可以提高具有多个可用 CPU 内核的服务器的性能,因为更新哈希表的请求可以分布在各个线程之间。为了最大限度地减少所采用的锁定机制的开销,请尝试使用不同的线程值,以根据给定工作负载中的请求数量和类型获得最佳性能。