Skip to content

Latest commit

 

History

History

async_function_pool

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 

一、背景说明 当前平台仅支持单线程同步执行逻辑。然而,用户在实际操作中可能会遇到一些场景,这些场景在单线程下执行时会非常耗时,从而影响效率。为了解决这个问题,我们引入了依赖库,支持线程池的方式,以便为低代码用户提供多线程操作的能力。 二、设计思路 当前仅考虑读取场景。如果用户需要进行增删改操作,需要引入存储工具如Redis或数据库,以确保在系统异常时任务结果不会失去最终一致性。 使用高阶函数,将每一个逻辑(ide服务端逻辑)初始化到依赖库的并发任务注册器中,<function key,Function1<K,T>>。 根据function key和入参,触发任务到线程池中,返回当前任务唯一标识taskId。 根据任务唯一标识taskId获取任务执行结果。

读的场景只需要上述方法。写/操作的场景: 区别是由于可能存在中断、异常等情况。需要配套使用redis存任务执行情况。 超时取消: 只能让用户指定超时时间,addTask方法的时候传进来。依赖库里面做处理,超过xx时间就取消当前任务。但是juc里面取消任务不是100%成功的。可以防止线程池爆了导致的死锁。 三、接口说明(非最终版本) 注册逻辑registerLogicInit 需要在应用初始化时(局部模板中是在进入应用时),将可能需要多线程执行的逻辑注册到本方法中。 入参 字段名称描述类型说明logicKey逻辑关键词String logic逻辑Function<String, String>逻辑的出入参皆为String的逻辑。String可以是序列化的json,对出入参的具体操作需要用户在逻辑中解析。

出参Boolean

并发执行逻辑asyncRunLogic 根据关键词,选择已经被注册的需要多线程执行的逻辑,执行逻辑。 入参 字段名称描述类型说明logicKey逻辑关键词String逻辑唯一标识requestStr逻辑的入参String

出参 字段名称描述类型说明taskId任务idString任务唯一标识 同步获取结果syncGetLogicResult 当任务执行完毕时,结果只能被获取一次。首次获取后会被删除结果。 入参 字段名称描述类型说明taskIdList任务id列表List根据任务id列表批量查询结果

出参 字段名称描述类型说明taskId任务idString任务唯一标识taskStatus单个任务执行状态Integer1成功,2进行中,3不存在taskResult单个任务执行返回结果StringString类型,须用户根据实际类型自行序列化。执行成功与否的标志需要逻辑在返回的序列化String中标记,获取结果后反序列化解析返回信息。 异步获取结果asyncGetLogicResult 与同步获取相同,区别点在于同步是流程卡住的,等全部任务执行完成后才会返回。异步则是仅返回当前执行完成的任务。