• 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,看最新的更新。

     

  • 相关阅读:
    22年11月-外包-第四轮面试题
    【C语言_线程pthread_互斥锁mutex_条件触发cond 之解析与示例 (开源)】.md updata:23/11/03
    Rust中的过程宏
    编程,不止有代码,还有艺术
    CISP模拟试题(三)
    hive sql 取当周周一 str_to_date(DATE_FORMAT(biz_date, ‘%Y%v‘), ‘%Y%v‘)
    Mall4cloud 微服务商城系统 2.0 发布
    GEE|typeof、ee.Algorithms.If、ee.Algorithms.IsEqual 语法
    Python+OpenCV实用案例应用教程:处理文件、摄像头和GUI
    9.3.4(数据链路层)
  • 原文地址:https://blog.csdn.net/shandeai520/article/details/126115058