当前位置: 首页 > news >正文

怎样做网站的优化网络营销的主要方法

怎样做网站的优化,网络营销的主要方法,东莞虎门高铁站,微信小程序教程在并发编程领域,其实除了使用上一篇中的属性不可变。还有一种方式那就是针对读多写少的场景下。我们可以读不加锁,只针对于写操作进行加锁。本质上就是读写复制。读的直接读取,写的使用写一份数据的拷贝数据,然后进行写入。在将新…

在并发编程领域,其实除了使用上一篇中的属性不可变。还有一种方式那就是针对读多写少的场景下。我们可以读不加锁,只针对于写操作进行加锁。本质上就是读写复制。读的直接读取,写的使用写一份数据的拷贝数据,然后进行写入。在将新的数据指到原来的引用上。Java中的CopyOnWriteArrayList、CopyOnWriteArraySet 都是按照COW,写时复制实现的。

    public E set(int index, E element) {// 加锁final ReentrantLock lock = this.lock;lock.lock();try {Object[] elements = getArray();E oldValue = get(elements, index);if (oldValue != element) {int len = elements.length;//复制一个数组Object[] newElements = Arrays.copyOf(elements, len);newElements[index] = element;setArray(newElements);} else {// Not quite a no-op; ensures volatile write semanticssetArray(elements);}return oldValue;} finally {// 解锁lock.unlock();}}

在这里插入图片描述

Copy On Write模式

那么COW在别的领域又没有对应的应用,
其实在类Linux中,操作系统创建进程的API是fork() , 传统的fork() 会创建一个父进程的完整副本,这样暂用的地址空间就比较大,并且很耗时。linux更加聪明,那就是fork()子进程的时候,不复制整个进程的地址空间,而是让父子进程共享同一个地址空间,只用在父进程或者子进程需要写入的是才会复制地址空间,父子空间在进行隔离。

最经典的领域其实还是函数式编程领域中,通过将数据拷贝一份进行处理,然后返回结果。
COW模式的缺点是可能对于空间上比较浪费的,毕竟需要使用两倍以上的空间,是一种读多写少场景下使用。空间换时间的一种取舍。

实际应用

在实际的RPC中,客户端都是按照路由表进行查询对应服务的列表,比如A服务对应三台实例,就会将请求分发给对应的服务,按照一定的负载均衡策略。而这类进行一般来说其实都是读多写少。处分出现系统故障,恢复服务下线才会出现问题。

我们按照Map.key为服务名,value使用CopyOnWriteArraySet保存。

public class RouterTables {private static HashMap<String,CopyOnWriteArraySet<Router>> cr = new HashMap<>();static {CopyOnWriteArraySet<Router> userApiRouters = new CopyOnWriteArraySet<>();userApiRouters.add(new Router("192.1.1.1","8080","online"));userApiRouters.add(new Router("192.1.1.2","8080","online"));userApiRouters.add(new Router("192.1.1.3","8080","faild"));CopyOnWriteArraySet<Router> accountApiRouters = new CopyOnWriteArraySet<>();accountApiRouters.add(new Router("192.1.1.1","8080","online"));accountApiRouters.add(new Router("192.1.1.2","8080","online"));accountApiRouters.add(new Router("192.1.1.3","8080","faild"));cr.put("api.user",userApiRouters);cr.put("api.account",accountApiRouters);}public static void addRouter(String apiServiceName,String ip,String port,String serverStatus) {if (!cr.containsKey(apiServiceName)) {CopyOnWriteArraySet<Router> accountApiRouters = new CopyOnWriteArraySet<>();accountApiRouters.add(new Router(ip,port,serverStatus));cr.put(apiServiceName,accountApiRouters);} else {CopyOnWriteArraySet<Router> routers = cr.get(apiServiceName);if (routers.contains(new Router(ip,port,serverStatus))) {return;} else {routers.add(new Router(ip,port,serverStatus));}}}public static Map<String,CopyOnWriteArraySet<Router>> findRouterInfoByApiName (String apiServiceName) {return (Map<String, CopyOnWriteArraySet<Router>>) cr.get(apiServiceName);}public static void deleteRouterInfoByApiName (String apiServiceName) {if (cr.containsKey(apiServiceName)) {cr.remove(apiServiceName);}}public static void prinltnAllInfo() {cr.forEach((s, routers) -> System.out.println(s +"\t"+ routers));}}

具体效果就是如下:

api.order	[Router{ip='192.1.1.1', port='8080', isOnline='online'}]
api.account	[Router{ip='192.1.1.1', port='8080', isOnline='online'}, Router{ip='192.1.1.2', port='8080', isOnline='online'}, Router{ip='192.1.1.3', port='8080', isOnline='faild'}]

总结

我们知道ArrayList是并发不安全的容器,如果需要在并发中使用数组集合,并且是读多写少的场景下,就非常推荐使用CopyOnWriteArrayList.
在这里插入图片描述

http://www.zhongyajixie.com/news/37255.html

相关文章:

  • h5技术做网站seo做的比较好的公司
  • 简易购物网站html代码百度app下载并安装最新版
  • 一级做爰网站百度首页精简版
  • 澄迈住房和城乡建设局网站懂得网站推广
  • 网站由什么构成网站流量统计平台
  • 优化网站 主题成功的软文营销案例
  • 网站建设费用构成阿里云网站搭建
  • 公司在选择网站时应考虑什么问题商丘seo公司
  • 做网站需要花钱吗关键词优化技巧
  • 上海网站建设广告语河南怎样做网站推广
  • 金华安全网站建设怎么收费广州新一期lpr
  • 幼儿园网站怎么做的seop
  • 做网站好看的旅行背景图片广州网站推广联盟
  • 做维修广告效最好是哪个网站吗对网络营销的认识有哪些
  • 做网站主流技术市场调研报告word模板
  • 全椒有做网站的吗广州seo外包多少钱
  • 规范机关单位网站建设neotv
  • 网站建设 微信营销网站在线优化工具
  • 做网站哪种编程语言最好下载app
  • 营销型网站建设公司提供网站建设网络优化公司有哪些
  • 公司建立网站的目的长沙seo行者seo09
  • 网站的特征包括哪些方面百度竞价开户多少钱
  • 手工制作冰墩墩欧美seo查询
  • 自个做网站教程代写
  • 视频源网站怎么做搭建网站多少钱
  • 一个企业网站做几个关键词上海搜索引擎优化公司排名
  • 宿州市住房建设委员会网站快速排名优化推广价格
  • 做网站公司的介绍免费发布广告的网站
  • 亳州是网站建设抖音seo排名系统哪个好用
  • php网站添加验证码百度竞价排名公司