Java并发 -- Copy-on-Write模式

栏目: Java · 发布时间: 5年前

内容简介:转载请注明出处:http://zhongmingmao.me/2019/05/19/java-concurrent-copy-on-write/访问原文「
  1. 类Unix操作系统调用fork(),会创建父进程的一个 完整副本 ,很 耗时
  2. Linux调用fork(),创建子进程时并不会复制整个进程的地址空间,而是让父子进程共享同一个地址空间
    • 只有在父进程或者子进程需要写入时才会 复制 地址空间,从而使父子进程拥有各自 独立 的地址空间
  3. 本质上来说,父子进程的地址空间和数据都是要隔离的,使用Copy-on-Write更多体现的是一种 延时策略
  4. Copy-on-Write还支持 按需复制 ,因此在操作系统领域能够 提升性能
  5. Java提供的Copy-on-Write容器,会复制 整个容器 ,所以在 提升读操作性能 的同时,是以 内存复制 为代价的
    • CopyOnWriteArrayList / CopyOnWriteArraySet

RPC框架

Java并发 -- Copy-on-Write模式

  1. 服务提供方是 多实例分布式 部署的,服务的客户端在调用RPC时,会选定一个服务实例来调用
  2. 这个过程的本质是 负载均衡 ,而做负载均衡的前提是客户端要有 全部的路由信息
  3. 一个核心任务就是 维护服务的路由关系 ,当服务提供方上线或者下线的时候,需要更新客户端的路由表信息
  4. RPC调用需要通过负载均衡器来计算目标服务的IP和端口号,负载均衡器通过路由表获取所有路由信息
    • 访问路由表这个操作对 性能 的要求很高,但路由表对 数据一致性 要求不高
// 采用Immutability模式,每次上线、下线都创建新的Router对象或删除对应的Router对象
@Data
@AllArgsConstructor
public class Router {
    private final String ip;
    private final Integer port;
    private final String iFace;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Router router = (Router) o;
        return Objects.equals(ip, router.ip) &&
                Objects.equals(port, router.port) &&
                Objects.equals(iFace, router.iFace);
    }

    @Override
    public int hashCode() {
        return Objects.hash(ip, port, iFace);
    }
}

class RouterTable {
    // <接口名 , 路由集合>
    private ConcurrentHashMap<String, CopyOnWriteArraySet<Router>> routingTable = new ConcurrentHashMap<>();

    // 获取路由
    public Set<Router> get(String iFace) {
        return routingTable.get(iFace);
    }

    // 增加路由
    public void add(Router router) {
        CopyOnWriteArraySet<Router> set = routingTable.computeIfAbsent(router.getIFace(),
                iFace -> new CopyOnWriteArraySet<>());
        set.add(router);
    }

    // 删除路由
    public void remove(Router router) {
        CopyOnWriteArraySet<Router> set = routingTable.get(router.getIFace());
        if (set != null) {
            set.remove(router);
        }
    }
}

转载请注明出处:http://zhongmingmao.me/2019/05/19/java-concurrent-copy-on-write/

访问原文「 Java并发 -- Copy-on-Write模式 」获取最佳阅读体验并参与讨论


以上所述就是小编给大家介绍的《Java并发 -- Copy-on-Write模式》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

跟小贤学运营

跟小贤学运营

陈维贤 / 机械工业出版社 / 2016-12-9 / 69.00

这是一部能帮助运营新人快速构建互联网运营方法论和快速掌握互联网运营实操的著作,是小贤在百度贴吧和小红书成长经历和运营经验的复盘。书中包含5大运营主题、40余种运营工具和渠道、50余种运营方法和技巧、100余个真实接地气的运营案例,能迅速帮助运营新人掌握全套实操技能和构建完整运营体系。 本书的视角和知识体系都比较立体化: 既有百度这样的互联网巨头运营规范和思路,又有小红书这样的明星创业公......一起来看看 《跟小贤学运营》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具