最近一个小时,我一直在寻找一个问题,但找不到任何东西。
我有一个ThreadPoolTaskExecutor
,负责在单独的线程中运行神经网络。
当前,我有一个POST
映射,该映射接受一个配置,然后将其传递到ThreadPoolTaskExecutor
,然后创建并运行网络。
如果我从Runnable
映射中将ThreadPoolTaskExecutor
添加到POST
,则执行时间大约需要7000毫秒才能完成。
如果我在没有服务器的情况下将Runnable
添加到ThreadPoolTaskExecutor
,则大约需要3000毫秒才能完成执行。
我认为这可能是服务器的开销,但是,我决定尝试启动服务器,然后运行网络。令我惊讶的是,时间大约为3000毫秒,这意味着服务器不会造成任何开销。
SpringApplication app = new SpringApplication(Application.class);
app.setBannerMode(Banner.Mode.OFF);
app.run(args);
NetworkConfig cfg = <int config>;
new ThreadPoolConfiguration().taskExecutor().execute(() -> new Network(cfg).fit());
总之,为什么从Spring-boot应用程序外部和main方法内部执行任务时,性能会有如此大的差异?