开发者社区> 问答> 正文

多个druid数据源, 可以共享一个createScheduler和destroyScheduler

因业务需求, 可能会创建几十个数据源, 如果每个数据源都用默认的createScheduler和destroyScheduler, 那产生的线程数就太多了, 可不可以共享一个scheduler呢?

原提问者GitHub用户bthulu

展开
收起
山海行 2023-07-05 18:04:58 164 1
4 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    是的,您可以共享一个 Scheduler 对象来管理多个数据库连接池的生命周期,以避免创建过多的线程。通过共享 Scheduler 对象,可以将多个数据库连接池的生命周期管理集中在一个线程池中,从而减少线程的创建和销毁,提高应用程序的性能和可维护性。

    在使用 Druid 连接池时,可以使用 DruidDataSource.setCreateScheduler 和 DruidDataSource.setDestroyScheduler 方法来设置连接池的创建和销毁线程池。可以创建一个共享的线程池对象,并将其设置为所有连接池的 createScheduler 和 destroyScheduler,从而实现共享线程池的目的

    2023-07-30 20:45:19
    赞同 1 展开评论 打赏
  • 可以共享一个Scheduler。在一个应用程序中,如果需要创建多个数据源并且每个数据源都需要独立的线程来执行查询,那么可以考虑使用共享的Scheduler。这样可以减少线程的数量,从而降低线程创建和管理的开销。在使用共享的Scheduler时,需要注意避免多个任务同时使用同一个Scheduler,否则可能会导致线程死锁或竞争条件。可以使用锁来保证线程安全。

    2023-07-09 10:08:19
    赞同 展开评论 打赏
  • 可以共享的,支持单独配置createScheduler和destroyScheduler就是为了数万个超大规模的连接池场景

    原回答者GitHub用户wenshao

    2023-07-06 10:43:21
    赞同 展开评论 打赏
  • 是的,您可以共享一个调度器(scheduler)来减少线程数。创建和销毁线程可能会带来一些开销,因此共享一个调度器可以有效地管理这些开销。下面是一种常用的方法:

    1. 创建一个全局的调度器实例,可在需要的地方访问到它。
    2. 在应用程序启动时初始化该调度器,并将其设置为全局变量。
    3. 当需要使用调度器时,直接引用全局变量,并将任务提交到调度器中执行。
    4. 当不再需要调度器时,可以关闭它。

    以下是一个示例代码,展示了如何使用Python中的concurrent.futures模块来实现共享调度器:

    import concurrent.futures
    
    # 全局调度器变量
    scheduler = None
    
    def initialize_scheduler():
        global scheduler
        scheduler = concurrent.futures.ThreadPoolExecutor()
    
    def destroy_scheduler():
        global scheduler
        scheduler.shutdown()
        scheduler = None
    
    # 示例任务函数
    def task():
        # 执行任务逻辑
        pass
    
    # 初始化调度器
    initialize_scheduler()
    
    # 提交任务到调度器中执行
    scheduler.submit(task)
    
    # 销毁调度器
    destroy_scheduler()
    

    通过这种方式,您可以在整个应用程序中共享同一个调度器,从而避免创建大量的线程。请根据您的具体业务需求和编程语言选择适当的调度器或线程池库。

    2023-07-05 19:03:32
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载