使用线程池优化sdk调用流程

本文介绍了如何通过线程池优化一个使用JNI调用人脸检测SDK的Java应用。原本每次调用都会加载许可证和创建大对象,导致响应慢。优化措施包括将算法流程封装为Callable任务,定制线程预加载许可证和对象,以及使用ThreadPoolExecutor配置自定义线程工厂。优化后,接口耗时降低60%,并发性能提升。线程池核心线程数设定为CPU核心数+1,拒绝策略选择AbortPolicy防止主线程执行任务时缺少必要对象。
摘要由CSDN通过智能技术生成

场景:
  现有一个人脸检测算法sdk包(C++),使用java中的jni调用该sdk提供出java可直接调用的接口,并打包成jar包(作为依赖包)供业务系统调用。

  人脸算法执行流程为:(1)加载lisence -> (2)初始化FaceDetect、FaceAttribute 等对象 -> (3)传入图片数据进行检测 。 其中第一步加载lisence在整个系统的生命周期中,只需要加载一次就行。第二步需要创建的对象比较大。

  初始情况:直接调用jar包接口,每次业务系统调用都会进行加载lisence,创建初始化FaceDetect、FaceAttribute对象。这样造成接口执行耗时久,大对象频繁创建销毁。

优化:
(1)依赖包中的算法执行流程,封装成一个Callable<FaceAttrInfo[]>,可以给线程池调用,使用Callable接口是因为需要返回算法执行后识别出的人脸结果。
算法执行流程封装成任务

(2)继承Thread,定制自己的线程,在线程初始时,加载lisence,创建FaceDetect、FaceAttribute 对象。
在这里插入图片描述

&#x

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值