2.06这套算法还要改进下,也有多线程下出现的问题,在单个peer的时候,不管怎么测试,windows和Linux版工作都是非常正常的
核心改进:磁盘缓存达到上限后,分配读缓存失败时,仅按上传请求大小读取数据,不再从磁盘一次性读取整个分块数据
但是多个peer同时请求的时候,依旧会导致磁盘读取情况大于上传速率数倍的现象,多peer的时候,实际读盘速度和流量图显示都不一样了

流量图显示10MB/s,实际上进程读盘在30MB/s左右

需要解决的是
和单个peer传输时候一样,达到上传速率和读盘速率相同的效果
应该是多线程静态竞争导致的,每个peer请求的时候都获得了回应值为1,以为还有剩余内存可申请分配,实际上内存已经用尽
这是另一种猜测(试了下不是这个问题,这套代码只在长效应用,BT分块缓存还是多线程竞争导致)
缓存成功标记0代表分配失败,但是代码写成了优先去分块缓存里删除当前缓存,然后尝试重新申请一次,peer很多的时候,导致一直在重复申请引发的
核心改进:优化长效做种磁盘缓存,避免一次性从磁盘读取过多数据(内存不足无法分配时加快删除即将过期的缓存以便分配最新的缓存)
长效没问题,毕竟访问量没BT那么大,一般很难出现内存紧张的情况

