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