航天控制系统为何首选单片机而非Linux
2026/4/1 0:25:45
// 模拟工作负载的方法privatestaticvoidsimulateWork(){try{// 模拟一个耗时100毫秒的I/O操作Thread.sleep(100);}catch(InterruptedExceptione){// 如果线程被中断,重新设置中断状态Thread.currentThread().interrupt();}}// 使用虚拟线程执行任务的方法privatestaticlongexecuteWithVirtualThreads(inttaskCount)throwsInterruptedException{// 记录开始时间longstart=System.currentTimeMillis();// 创建一个虚拟线程执行器try(ExecutorServiceexecutor=Executors.newVirtualThreadPerTaskExecutor()){// 提交taskCount个任务到虚拟线程执行器for(inti=0;i<taskCount;i++){executor.submit(Test::simulateWork);}// 关闭执行器,不再接受新任务executor.shutdown();// 等待所有任务完成,最多等待1小时executor.awaitTermination(1,TimeUnit.HOURS);}// 计算并返回总耗时returnSystem.currentTimeMillis()-start;}// 使用传统线程执行任务的方法privatestaticlongexecuteWithTraditionalThreads(inttaskCount)throwsInterruptedException{// 记录开始时间longstart=System.currentTimeMillis();// 创建一个固定大小为100的线程池try(ExecutorServiceexecutor=Executors.newFixedThreadPool(100)){// 提交taskCount个任务到线程池for(inti=0;i<taskCount;i++){executor.submit(Test::simulateWork);}// 关闭线程池,不再接受新任务executor.shutdown();// 等待所有任务完成,最多等待1小时executor.awaitTermination(1,TimeUnit.HOURS);}// 计算并返回总耗时returnSystem.currentTimeMillis()-start;}// 格式化时间的方法,将毫秒转换为更易读的格式privatestaticStringformatTime(longmilliseconds){// 返回格式化的字符串,同时显示毫秒数和秒数(保留两位小数)returnString.format("%d 毫秒 (%.2f 秒)",milliseconds,milliseconds/1000.0);}publicstaticvoidmain(String[]args)throwsInterruptedException{// 设置要执行的任务数量inttaskCount=100000;// 开始测试传统线程System.out.println("正在使用传统线程执行任务...");// 执行传统线程测试并记录耗时longtraditionalTime=executeWithTraditionalThreads(taskCount);// 输出传统线程的执行时间System.out.println("传统线程完成任务,耗时 "+formatTime(traditionalTime));// 开始测试虚拟线程System.out.println("\n正在使用虚拟线程执行任务...");// 执行虚拟线程测试并记录耗时longvirtualTime=executeWithVirtualThreads(taskCount);// 输出虚拟线程的执行时间System.out.println("虚拟线程完成任务,耗时 "+formatTime(virtualTime));// 计算两种线程执行时间的差异longtimeDifference=traditionalTime-virtualTime;// 输出性能差异和速度提升倍数System.out.println("\n性能差异:"+formatTime(timeDifference)+" ("+String.format("%.2f",(double)traditionalTime/virtualTime)+" 倍速度提升)");}正在使用传统线程执行任务...传统线程完成任务,耗时106725毫秒(106.73秒)正在使用虚拟线程执行任务...虚拟线程完成任务,耗时2014毫秒(2.01秒)性能差异:104711毫秒(104.71秒)(52.99倍速度提升)Processfinishedwithexitcode0packagecom.travel.echo.test;importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;importjava.util.concurrent.TimeUnit;/** * @Description * @Author LuoYang * @Date 2025/12/6 周六 */publicclassTest{publicstaticvoidmain(String[]args)throwsInterruptedException{// 设置要执行的任务数量inttaskCount=100000;// 开始测试传统线程System.out.println("正在使用传统线程执行任务...");// 执行传统线程测试并记录耗时longtraditionalTime=executeWithTraditionalThreads(taskCount);// 输出传统线程的执行时间System.out.println("传统线程完成任务,耗时 "+formatTime(traditionalTime));// 开始测试虚拟线程System.out.println("\n正在使用虚拟线程执行任务...");// 执行虚拟线程测试并记录耗时longvirtualTime=executeWithVirtualThreads(taskCount);// 输出虚拟线程的执行时间System.out.println("虚拟线程完成任务,耗时 "+formatTime(virtualTime));// 计算两种线程执行时间的差异longtimeDifference=traditionalTime-virtualTime;// 输出性能差异和速度提升倍数System.out.println("\n性能差异:"+formatTime(timeDifference)+" ("+String.format("%.2f",(double)traditionalTime/virtualTime)+" 倍速度提升)");}// 使用传统线程执行任务的方法privatestaticlongexecuteWithTraditionalThreads(inttaskCount)throwsInterruptedException{// 记录开始时间longstart=System.currentTimeMillis();// 创建一个固定大小为100的线程池try(ExecutorServiceexecutor=Executors.newFixedThreadPool(100)){// 提交taskCount个任务到线程池for(inti=0;i<taskCount;i++){executor.submit(Test::simulateWork);}// 关闭线程池,不再接受新任务executor.shutdown();// 等待所有任务完成,最多等待1小时executor.awaitTermination(1,TimeUnit.HOURS);}// 计算并返回总耗时returnSystem.currentTimeMillis()-start;}// 使用虚拟线程执行任务的方法privatestaticlongexecuteWithVirtualThreads(inttaskCount)throwsInterruptedException{// 记录开始时间longstart=System.currentTimeMillis();// 创建一个虚拟线程执行器try(ExecutorServiceexecutor=Executors.newVirtualThreadPerTaskExecutor()){// 提交taskCount个任务到虚拟线程执行器for(inti=0;i<taskCount;i++){executor.submit(Test::simulateWork);}// 关闭执行器,不再接受新任务executor.shutdown();// 等待所有任务完成,最多等待1小时executor.awaitTermination(1,TimeUnit.HOURS);}// 计算并返回总耗时returnSystem.currentTimeMillis()-start;}// 模拟工作负载的方法privatestaticvoidsimulateWork(){try{// 模拟一个耗时100毫秒的I/O操作Thread.sleep(100);}catch(InterruptedExceptione){// 如果线程被中断,重新设置中断状态Thread.currentThread().interrupt();}}// 格式化时间的方法,将毫秒转换为更易读的格式privatestaticStringformatTime(longmilliseconds){// 返回格式化的字符串,同时显示毫秒数和秒数(保留两位小数)returnString.format("%d 毫秒 (%.2f 秒)",milliseconds,milliseconds/1000.0);}}