并发编程注意事项

背景

一般在执行批处理的场景下,如果串行单线程的效率低,可以考虑并发,但是需要注意一些事情。

具体

首先需要确定,单个线程执行的场景下,耗时的代码块,一般的做法是通过打印执行时间,然后优化到合适的地步。

采用多线程来执行任务,由于并发的不确定性以及并发引入的复杂性,要能够保证并发处理的结果是正确的,是准确的。
既然多线程来执行任务,那么任务中的重复代码可以抽出来的,就放到外面,这样任务里面就执行不重复的代码,避免重复代码执行的耗时。

多线程的使用不能盲目加大线程数,等待队列大小。要实现能够预估单个任务执行时长,并且预估出满足期望的线程大小以及队列大小等参数。

多线程使用不恰当,会抢占其他处理的资源,比如CPU资源等。要关注这些影响。

多线程要恰当使用限速处理。因为你线程数增加,可能对下游服务造成一定程度的影响。因此为了保护下游服务的可用性,也要关注这个。

多线程执行的实时运行过程,要能够做到实时监控,比如,自定义调度器,然后通过一个监控线程,获取调度器的实时数据,打印出日志或者其他方式,能够做到有数据可查。
比如:2018-01-21 12:10:21,509 ERROR [pool-15-thread-1 ] c.c.a.f.c.MonitorThread [?] - [monitor] [50/50] Active: 50, Completed: 1045, Task: 412552, isShutdown: false, isTerminated: false
有了上面的日志数据,我们就可以根据运行情况,调整线程数量等。当然了修改线程数,也要结合看当前CPU使用率和内存等情况,然后合理设置。如果你16核数,CPU使用了都1000%多了,那么再调大线程数,反而不太好。要结合top命令(结合交互参数M和P),看Cpu(s): 17.3%us和

TIPS:
优化的意义就是:一块代码如果放到执行千万次的环境中,可以看到优化前后其节省了多少时间。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值