Nambers / MiraiCP

c++ SDK of Mirai
https://eritque-arcus.tech/MiraiCP/
GNU Affero General Public License v3.0
177 stars 31 forks source link

修改libLoader插件加载模型 #154

Closed Antares0982 closed 1 year ago

Antares0982 commented 1 year ago

功能描述

现在单个插件绑定单个线程,线程如果在插件中被阻塞将导致后续事件无法接收(如,nextMessage)。为保证最大程度并发,广播任务以及启用/禁用任务将在线程池中随机派发给工作线程,通过thread local变量绑定当前工作中的插件名称到工作线程。

libLoader线程当前为轮询来处理插件加载卸载任务。但这样会造成大量cpu资源浪费。以及libLoader线程应负责定时任务的工作。使用信号量解决这些问题,唤醒后再tick。

PlatformExceptionHandler可以通过thread local的变量判断当前线程工作中的插件并卸载对应插件。

API change:loader api将新增一个函数指针,用户编程时无感知,但实现该功能的前后版本无法兼容。

原因

如上

组件选择

loader