做垂直平台网站,重庆网站建设咨询,自己开外销网站怎么做,中国外贸平台排名摘要:
VH的driver的对外接口, 要做到可以并行#xff0c;也就是两个不同的线程#xff0c;分别调用#xff0c;不能互相阻塞。
本文记录对其的思考和设计。 上下文: 2024-05-28 blue-VH-driver-需求分析及问题分析-CSDN博客
2024-05-27 blue-vh-问题点-CSDN博客
2024-05…
摘要:
VH的driver的对外接口, 要做到可以并行也就是两个不同的线程分别调用不能互相阻塞。
本文记录对其的思考和设计。 上下文: 2024-05-28 blue-VH-driver-需求分析及问题分析-CSDN博客
2024-05-27 blue-vh-问题点-CSDN博客
2024-05-23 blue-vh-分析-CSDN博客 driver对外接口的并行调用: 注意这里有个隐含条件所谓的上层调用的并行是指在多个线程并行的去调用driver的接口而不是用户态自己封装的协程。所以要注意所谓的并行不能阻塞究竟是不能阻塞什么。当认为是多线程并行调用的时候那么自然就是多个上层调用线程在调用接口的时候不能互相阻塞。也就是如果两个线程去分别调用同样的接口两者需要互相独立思路就是使用线程池和task将上层调用的处理封装成task然后交给线程池去执行这样在执行的时候阻塞的是线程池中的线程而不是上层调用方的线程。然后让上层调用方的线程休眠等待task处理完成并且处理超时。对外暴漏的接口调用如果是需要和组态交互的比如说 SearchPoints 把这个包装成task, 也就是 CVxTaskSearchPointsInfoV2 继承自 CVxTask 实现 Execute()接口 在 Execute () 里 调用IPointCfgInterfaceV2的异步接口并且在这个线程等待 IPointCfgInterfaceV2 回调的数据处理。 将 CVxTaskSearchPointsInfoV 放到 异步任务调度器 CVxTaskInvoker 里去执行 这样就不会阻塞上层标准数据服务的调用driver接口的线程了。假设 CVxTaskInvoker 里启动了缺省的4个线程那么 CVxTaskSearchPointsInfoV2 这个task就由 CVxTaskSearchPointsInfoV 里的4个工作线程其中的一个去调用CVxTaskSearchPointsInfoV2::Execute()这个接口里一直等到拿到组态回调的数据再返回.那么这次查询返回的数据放在了 CVxTaskSearchPointsInfoV2 里 使用 std::unordered_map 来装载这个哈希的key使用递增的序列号每次涉及到与组态交互数据的查询都是递增序列号。 这个序列号返回给标准数据服务的接口调用这样小宝那边如果要翻页的时候就把这个查询的序列号传给driver。 还有就是错误处理和VH数据库失去连接 以及VH的组态的状态切换到 时候对缓存的数据的生命周期的影响以及和上层标准数据服务的交互以及VH返回的数据超时和标准数据服务的配合感觉还有更多的问题没有想到。 问题分析 设计: 类图-线程池和task: 类图-driver: 时序图-driver-查询位点: