Java并发 -- Copy-on-Write模式
fork
- 类Unix操作系统调用fork(),会创建父进程的一个完整副本,很耗时
- Linux调用fork(),创建子进程时并不会复制整个进程的地址空间,而是让父子进程共享同一个地址空间
- 只有在父进程或者子进程需要写入时才会复制地址空间,从而使父子进程拥有各自独立的地址空间
- 本质上来说,父子进程的地址空间和数据都是要隔离的,使用Copy-on-Write更多体现的是一种延时策略
- Copy-on-Write还支持按需复制,因此在操作系统领域能够提升性能
- Java提供的Copy-on-Write容器,会复制整个容器,所以在提升读操作性能的同时,是以内存复制为代价的
- CopyOnWriteArrayList / CopyOnWriteArraySet
RPC框架
- 服务提供方是多实例分布式部署的,服务的客户端在调用RPC时,会选定一个服务实例来调用
- 这个过程的本质是负载均衡,而做负载均衡的前提是客户端要有全部的路由信息
- 一个核心任务就是维护服务的路由关系,当服务提供方上线或者下线的时候,需要更新客户端的路由表信息
- RPC调用需要通过负载均衡器来计算目标服务的IP和端口号,负载均衡器通过路由表获取所有路由信息
- 访问路由表这个操作对性能的要求很高,但路由表对数据一致性要求不高
1 | // 采用Immutability模式,每次上线、下线都创建新的Router对象或删除对应的Router对象 |
参考资料
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.