首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多线程应用中的多核JIT

多线程应用中的多核JIT
EN

Stack Overflow用户
提问于 2014-03-26 15:17:56
回答 1查看 932关注 0票数 1

我想知道ProfileOptimization (也称为多核JIT)是如何在多线程应用程序中工作的。

文档指出,ProfileOptimization跟踪并记录在应用程序执行期间调用的方法。但是,如果有多个线程同时执行呢?在这种情况下,方法调用顺序可能因运行而异。因此,配置文件将始终被新的数据覆盖。

这是否意味着在这种情况下使用多核JIT并不有效?或者可能是ProfileOptimization跟踪方法调用来自调用ProfileOptimazation.StartProfile(.)的线程?还是别的什么?

有人能解释一下ProfileOptimization在这种情况下是如何表现的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-26 16:18:53

还不清楚为什么您认为线程是一个问题,我只想谈一段时间的特性。抖动的传统工作方式是在方法开始运行前的一秒内编译方法。这与多核JIT选项不同,它需要更早地编译方法,这样才能利用运行抖动的额外核心。问题是,它应该提前编译什么方法?显然,如果编译错误的方法,只会在程序开始后的几分钟内被调用,那么收益就很小了。或者更糟的是,从来没有被叫过。

为了弄清楚它应该使用什么方法,它需要提前知道将运行什么方法。当然,时间机器不是一种选择。只有知道以前发生的事情,才能在一定程度上准确地猜测到这一点。假设当程序第二次运行时,它将以大致相同的顺序调用方法。

因此,对StartProfile()的调用开始记录那些被抛出的方法的名称,只需按照它们第一次运行和编译的顺序来记录。方法名称的列表存储在文件中。下一次运行程序并再次调用StartProfile()时,它将开始使用该文件中的数据来完成其他核心工作,并按它们在列表中出现的顺序预编译这些方法。

这个方法在第一次运行之前就已经编译过了,这是相当有可能的,不会有任何延迟。因此,改善您的程序的温暖启动时间。这不一定,当它还没有被编译的时候,什么都不会出错,传统上发生的正常的实时编译就会处理它。只是效率不高。

如果您的程序在启动时具有高度的不确定性,在从一次运行到下一次运行的代码中具有非常不同的执行路径,那么不,多核jit对启动时间的好处的可能性很低。抖动将预编译错误的方法。这是非常不寻常的,真正的程序在启动时很少会这样。否则,这与线程没有任何关系,它们不太可能比主线程更不确定。实际上,主线程会与用户交互,用户可以像人一样表现出非理性,而你的工作人员却不这样做。一般来说,线程的问题在于,它们倾向于解决隐藏线程错误的执行模式。

请记住,所有这一切只是在你的程序生命的第一个,给予或采取,30秒内的问题。只有温暖的开始时间才重要。当抖动率下降过低时,抖动就会完全停止记录。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22665436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档