当前位置: 首页 > news >正文

POI优化Excel录入

57000+单词原始录入时间258S

核心代码:

List<Word> wordBookList = ExcelUtil.getReader(file.getInputStream()).readAll(Word.class);
            if (!CollectionUtil.isEmpty(wordBookList)) {
                for (Word word : wordBookList) {
	//逐条向数据库中插入单词
                    wordMapper.insert(word);
                }
            }

线程池方式录入时间18S

核心代码:

//获取核心数
            int coreCount = Runtime.getRuntime().availableProcessors();
            //创建线程池
            ExecutorService executorService= Executors.newFixedThreadPool(2*coreCount);
            List<Word> wordBookList = ExcelUtil.getReader(file.getInputStream()).readAll(Word.class);
            //对列表单词进行分区并发录入
            int partitionSize=wordBookList.size()/(2*coreCount);
            List<List<Word>> wordListPartition = Lists.partition(wordBookList, partitionSize);
            for (int i = 0; i <wordListPartition.size(); i++) {
                Runnable task=new ExcelInput(wordListPartition.get(i),wordMapper);
                executorService.execute(task);
            }
            executorService.shutdown();
	//阻塞当前线程,直到线程池中的任务执行完毕
            try {
                if(!executorService.awaitTermination(1, TimeUnit.HOURS)){
                    executorService.shutdownNow();
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
                Thread.currentThread().interrupt();
            }

优化流程:

首先获取当前主机核心数N,因为大数据量单词录入属于IO密集型所以我们设置线程池的大小为2*N第二步我选择将List拆分为2*N接着放入线程池当中去执行单词录入任务基于此线程池中的多个线程可以对数据的录入进行并发操作大大提高了录入的效率

选择2*N的原因是代码中获取的核心数为物理核心数,而实际上主机可以利用超线程技术将一个物理核心当做两个逻辑核心来使用,当我们想让CPU利用率达到100%时就可以设置2*N个线程数并将单词分为2*N份交给线程池中的线程处理同时减少了线程的上下文切换所带来的损耗。

240/258=0.93

优化后单词录入效率提高90%以上


文章转载自:
http://caducei.aaladrg.cn
http://barrack.aaladrg.cn
http://apsis.aaladrg.cn
http://boldly.aaladrg.cn
http://aus.aaladrg.cn
http://bewilderment.aaladrg.cn
http://chickpea.aaladrg.cn
http://barlow.aaladrg.cn
http://chillon.aaladrg.cn
http://antienzymatic.aaladrg.cn
http://bijou.aaladrg.cn
http://atrioventricular.aaladrg.cn
http://bomblike.aaladrg.cn
http://catheter.aaladrg.cn
http://aerodone.aaladrg.cn
http://brumous.aaladrg.cn
http://astigmia.aaladrg.cn
http://anelasticity.aaladrg.cn
http://chime.aaladrg.cn
http://alpha.aaladrg.cn
http://anadolu.aaladrg.cn
http://biedermeier.aaladrg.cn
http://catchpoll.aaladrg.cn
http://alcyonarian.aaladrg.cn
http://centralist.aaladrg.cn
http://antioch.aaladrg.cn
http://biweekly.aaladrg.cn
http://canvas.aaladrg.cn
http://administrate.aaladrg.cn
http://caff.aaladrg.cn
http://www.dtcms.com/a/24686.html

相关文章:

  • LangFlow和LangChain有什么区别
  • 大数据SQL调优专题——Flink执行原理
  • Web3 通识
  • 解锁外观模式:Java 编程中的优雅架构之道
  • TortoiseSVN\bin下的没有svn.exe的解决问题
  • Linux的基础指令和环境部署,项目部署实战(下)
  • pyinstaller打包报错:INTEL MKL ERROR: 找不到指定的模块。 mkl_intel_thread.dll.
  • linux 安装启动zookeeper全过程及遇到的坑
  • C++ 模拟真人鼠标轨迹算法 - 防止游戏检测
  • 启元世界(Inspir.ai)技术浅析(七):AI Beings 平台
  • Nginx下proxy_redirect的三种配置方式
  • 【系列教程】Python第四课:条件判断 | 让程序学会思考的秘密
  • UE求职Demo开发日志#33、34 优化#2 删没用的场景和优化UI
  • 浅谈模组-相机鬼像
  • blender笔记2
  • Leetcode 3453. Separate Squares I
  • MISRA C vs CERT C 是两种广泛使用的 C 语言编码规范对比介绍
  • RabbitMQ服务异步通信
  • 修改时无条件,可以自定义id条件(通过查询)
  • C++ Primer 访问控制与封装
  • 防御保护第三次练习
  • 【大学生职业规划大赛备赛PPT资料PDF | 免费共享】
  • 论文阅读 DOES END-TO-END AUTONOMOUS DRIVING REALLY NEED PERCEPTION TASKS?
  • 还在为AI模型部署发愁?VSCode插件让你轻松拥有DeepSeek和近百种AI模型!
  • sql注入中,如果information_schema被过滤,该怎么绕过
  • 【Linux系统】—— 调试器 gdb/cgdb的使用
  • 腾讯云大模型知识引擎×DeepSeek赋能文旅
  • 筛选相同项
  • 深入解析TCP/IP协议:从理论到实践的全链路剖析
  • Pytorch论文实现之GAN-C约束鉴别器训练自己的数据集