espipe并发编程应用

首先给各位股东报告个好消息,原本上个月发布的版本0.0.4-SNAPSHOT延误了一个月,今天终于完工了,正式开启0.0.5-SNAPSHOT。

espipe-core有三大目标:

1. 解决数据同步格式问题

2. 解决数据同步性能问题

3. 解决多环境维护不方便问题

像同步数据这种长时间的任务,使用多线程来做性能优化,可以说是首选。

多线程的中心思想就是分工,协作,互斥

01 espipe多线程应用

分工:采用Thread per message模式, 一个index的init或者sync作为一个线程,采用线程池管理Thread的生命周期。

协作:目前各线程之前不需要同步信息。

互斥:同一个index在同一时间内只能有一个init或者sync线程,不允许重复;否则index mapping可能会错误的设置为默认字段类型,

采用ConcurrentHashMap来管理每个线程,自带分段锁。

异常处理:ThreadPoolExecutor execute 子线程内抛出的异常无法在主线程内捕获,采用Thread.UncaughtExceptionHandler,以log的形式暂时先保存错误信息。

ThreadPoolExecutor submit 可以通过Future.get()直接在主线程内try catch异常。

优雅退出:直接在stop方法上加上@PreDestroy

其他补充

异常处理:继承ThreadPoolExecutor,重写afterExecute方法来处理异常。

优雅退出

// 方法1SpringApplication application =   new SpringApplication(Application.class);application.addListeners((ApplicationListener) event -> {  log.info("Graceful Shutdown");});application.run(args);// 方法2Thread hook = new Thread(() ->   System.out.println("Graceful shutdown"));Runtime.getRuntime().addShutdownHook(hook);

02 聊聊Java

并发编程不是java的特性,并发模型可以通过管程或者信号量来实现。

管程是一种解决并发问题的通用模型,能解决线程协作,互斥问题。

在1974年和1977年,Hore和Hansen提出了管程。

在1965年,荷兰学者Dijkstra提出的信号量(Semaphores)机制。

Java中管程的实现就是synchronized,javap反编译后你就可以看到synchronized关键字被编译成为monitorenter和monitorexit,这个monitor经常被翻译成为监视器或者管程。

所谓分工指的是如何高效地拆解任务并分配给线程,

而同步指的是线程之间如何协作,

互斥则是保证同一时刻只允许一个线程访问共享资源。

按照这三个类别来看Java并发包就简单了。

分工:

线程池Executor, Fork/Join, Future

同步,协作:

sychronized, lock & condition

CountDownLatch, CyclicBarrier, Semaphore

互斥

无锁: Immutable, ThreadLocal. CAS, CopyOnWrite, AtomicInteger

有锁: synchronized, Lock, ReadWriteLock

同步和互斥大佬都已经在JDK里包办了,就剩个分工可以玩出点花样:

Guarded Syspension模式,Balking模式,Thread-Per-Message模式,生产者消费者模式,Work-Thread模式,两阶段终止模式。

看书写demo,只能浅尝一下,实战还得来真实相中,下载espipe,来次真实的体验。

关注公众号nooshhub,看最新的更新。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值