Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 多线程应用中的多核JIT_Multithreading_.net 4.5_Multicore_Jit - Fatal编程技术网

Multithreading 多线程应用中的多核JIT

Multithreading 多线程应用中的多核JIT,multithreading,.net-4.5,multicore,jit,Multithreading,.net 4.5,Multicore,Jit,我想知道ProfileOptimization(也称为多核JIT)如何在多线程应用程序中工作 文档说明ProfileOptimization跟踪并记录在应用程序执行期间调用的方法。但是如果有多个线程同时执行呢?在这种情况下,每个运行的方法调用顺序可能不同。所以,配置文件将始终被新数据覆盖 这是否意味着在这种情况下使用多核JIT是无效的?或者可能是ProfileOptimization只跟踪来自调用ProfileOptimization.StartProfile的线程的方法调用。。。?还是别的什么

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

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

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


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

你为什么认为线程是一个问题还不是很清楚,我先来讨论一下这个特性。抖动工作的传统方式是及时编译方法,即在方法开始运行前的几分之一秒。这与多核JIT选项不同,它必须更早地编译方法,以便能够利用运行jitter的额外内核。问题是,它应该尽早编译什么方法?显然,如果它编译了错误的方法,那么它的收益微乎其微。这个方法只会在程序启动后几分钟内被调用。更糟糕的是,从来没有人打过电话

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

因此,对StartProfile的调用开始记录被jitted的方法的名称,只是按照它们第一次运行和编译的顺序。该方法名列表存储在一个文件中。下次运行该程序并再次调用StartProfile时,它现在开始使用该文件中的数据为其他内核提供工作,按照方法在列表中出现的顺序预编译这些方法

这种方法在第一次运行之前就已经编译好了,不会产生任何延迟。从而提高程序的热启动时间。不必如此,当它还没有被编译的时候,什么都不会出错,传统的即时编译会处理它。它只是没有可能的那么有效

如果您的程序在启动时具有高度的不确定性,从一次运行到下一次运行,代码的执行路径有很大的不同,那么,不,多核jit对您的启动时间有好处的可能性很低。抖动将预编译错误的方法。这是非常不寻常的,真正的程序在启动时很少有这样的行为。这与线程没有任何关系,它们不太可能比主线程更不确定。相反,主线程应该与用户交互,用户的行为可能会像人一样不理性,而你的工作人员则不然。通常,线程的问题是,它们倾向于采用隐藏线程争用错误的执行模式


请记住,所有这些都只在程序生命的最初30秒内起作用。而且只关系到开始时间。当抖动速率下降得太低时,抖动就会完全停止录制。

你不太清楚为什么会认为线程是一个问题,我只想讨论一下这个特性。抖动工作的传统方式是及时编译方法,即在方法开始运行前的几分之一秒。这与多核JIT选项不同,它必须更早地编译方法,以便能够利用运行jitter的额外内核。问题是,它应该尽早编译什么方法?显然,如果它编译了错误的方法,那么它的收益微乎其微。这个方法只会在程序启动后几分钟内被调用。更糟糕的是,从来没有人打过电话

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

因此,对StartProfile的调用开始记录被jitted的方法的名称,只是按照它们第一次运行和编译的顺序。该方法名列表存储在一个文件中。下次运行该程序并再次调用StartProfile时,它现在开始使用该文件中的数据为其他内核提供工作,按照方法在l中出现的顺序预编译这些方法 是的

这种方法在第一次运行之前就已经编译好了,不会产生任何延迟。从而提高程序的热启动时间。不必如此,当它还没有被编译的时候,什么都不会出错,传统的即时编译会处理它。它只是没有可能的那么有效

如果您的程序在启动时具有高度的不确定性,从一次运行到下一次运行,代码的执行路径有很大的不同,那么,不,多核jit对您的启动时间有好处的可能性很低。抖动将预编译错误的方法。这是非常不寻常的,真正的程序在启动时很少有这样的行为。这与线程没有任何关系,它们不太可能比主线程更不确定。相反,主线程应该与用户交互,用户的行为可能会像人一样不理性,而你的工作人员则不然。通常,线程的问题是,它们倾向于采用隐藏线程争用错误的执行模式


请记住,所有这些都只在程序生命的最初30秒内起作用。而且只关系到开始时间。当抖动速率下降得太低时,抖动就会完全停止录制。

Hans,谢谢您的详细回复。我会尽力澄清我的想法。说使用多核JIT效率不高,我认为它不如单线程环境中的效率高。你的帖子证实了这一点。顺便说一句,我们不局限于只在应用启动时使用StartProfile。通过在StartProfile中指定相应的概要文件名,我们可以在应用程序第一次开始执行某些操作时使用它。例如,在我们的应用程序中,我们在打开子窗口时使用它,它工作得很好。我认为在启动后台任务时使用它也很好,但不幸的是,它不会那么有效,因为每次运行的方法调用顺序可能不同。Hans,感谢您提供非常详细的答复。我会尽力澄清我的想法。说使用多核JIT效率不高,我认为它不如单线程环境中的效率高。你的帖子证实了这一点。顺便说一句,我们不局限于只在应用启动时使用StartProfile。通过在StartProfile中指定相应的概要文件名,我们可以在应用程序第一次开始执行某些操作时使用它。例如,在我们的应用程序中,我们在打开子窗口时使用它,它工作得很好。我认为在启动后台任务时使用它也很好,但不幸的是,它效率不高,因为每次运行的方法调用顺序可能不同。