4.3.1. 当vm-max-threads 设为0 时(阻塞方式) 换出 主线程定期检查发现内存超出最大上限后,会直接以阻塞的方式,将选中的对象保存到swap 文件中,并释放对象占用的内存空间,此过程会一直重复直到下面条件满足 1.内存使用降到最大限制以下 2.swap 文件满了。 3.几乎全部的对象都被交换到磁盘了 换入 当有客户端请求已经被换出的value 时,主线程会以阻塞的方式从swap 文件中加载对应的 value 对象,加载时此时会阻塞所有客户端。然后处理该客户端的请求 4.3.2. 当vm-max-threads 大于0 时(工作线程方式) 换出 当主线程检测到使用内存超过最大上限,会将选中要交换的对象信息放到一个队列中交给工 作线程后台处理,主线程会继续处理客户端请求。 换入 如果有客户端请求的key 已经被换出了,主线程会先阻塞发出命令的客户端,然后将加载对 象的信息放到一个队列中,让工作线程去加载。加载完毕后工作线程通知主线程。主线程再 执行客户端的命令。这种方式只阻塞请求的value 是已经被换出key 的客户端。 总的来说阻塞方式的性能会好一些,因为不需要线程同步、创建线程和恢复被阻塞的客 户端等开销。但是也相应的牺牲了响应性。工作线程方式主线程不会阻塞在磁盘IO 上,所 以响应性更好。如果我们的应用不太经常发生换入换出,而且也不太在意有点延迟的话推荐 使用阻塞方式。 |
更多精彩内容请关注:http://bbs.superwu.cn
关注超人学院微信二维码:
时间: 2024-11-09 03:42:19