Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.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
C# 如何在线程用完时避免线程池瓶颈_C#_.net_Multithreading_Threadpool_Timing - Fatal编程技术网

C# 如何在线程用完时避免线程池瓶颈

C# 如何在线程用完时避免线程池瓶颈,c#,.net,multithreading,threadpool,timing,C#,.net,Multithreading,Threadpool,Timing,我们有一个有一些时间限制的应用程序,比如说我们需要每500毫秒执行一次操作,它是一种看门狗,所以如果我们在500毫秒之前不发送消息,坏事情就会发生 应用程序大量使用ThreadPool,这个看门狗与ThreadPool交互 我们发现,在一些低端机器上,有时当我们将一个新工作项排队时,执行它需要大约800毫秒,因此看门狗会启动。我们猜测这与线程池耗尽线程/创建新线程有关 有没有一种方法可以避免这种情况,比如强制线程池提前创建线程,或者在不同的线程中创建线程,这样看门狗就不必等到线程池可以执行请求了

我们有一个有一些时间限制的应用程序,比如说我们需要每500毫秒执行一次操作,它是一种看门狗,所以如果我们在500毫秒之前不发送消息,坏事情就会发生

应用程序大量使用ThreadPool,这个看门狗与ThreadPool交互

我们发现,在一些低端机器上,有时当我们将一个新工作项排队时,执行它需要大约800毫秒,因此看门狗会启动。我们猜测这与线程池耗尽线程/创建新线程有关


有没有一种方法可以避免这种情况,比如强制线程池提前创建线程,或者在不同的线程中创建线程,这样看门狗就不必等到线程池可以执行请求了?

您可以尝试使用方法。

您可以尝试使用方法。

您可以尝试使用方法。

您可以尝试使用方法。

回复从法律上来说,29可以在一定程度上有所帮助。 但是,即使有许多线程,线程池也可能饱和,一些任务可能在全局任务队列的末尾排队

我们在Akka.NET中也遇到了同样的问题,在那里,即使在重载情况下也必须执行系统参与者

我们现在将这些敏感任务移动到它自己的专用线程池中,这样这些任务就不会出现在全局池队列的末尾


我们可以使用特殊的任务调度器将任务调度到此队列上。

来自lawliet29的回复在一定程度上会有所帮助。 但是,即使有许多线程,线程池也可能饱和,一些任务可能在全局任务队列的末尾排队

我们在Akka.NET中也遇到了同样的问题,在那里,即使在重载情况下也必须执行系统参与者

我们现在将这些敏感任务移动到它自己的专用线程池中,这样这些任务就不会出现在全局池队列的末尾


我们可以使用特殊的任务调度器将任务调度到此队列上。

来自lawliet29的回复在一定程度上会有所帮助。 但是,即使有许多线程,线程池也可能饱和,一些任务可能在全局任务队列的末尾排队

我们在Akka.NET中也遇到了同样的问题,在那里,即使在重载情况下也必须执行系统参与者

我们现在将这些敏感任务移动到它自己的专用线程池中,这样这些任务就不会出现在全局池队列的末尾


我们可以使用特殊的任务调度器将任务调度到此队列上。

来自lawliet29的回复在一定程度上会有所帮助。 但是,即使有许多线程,线程池也可能饱和,一些任务可能在全局任务队列的末尾排队

我们在Akka.NET中也遇到了同样的问题,在那里,即使在重载情况下也必须执行系统参与者

我们现在将这些敏感任务移动到它自己的专用线程池中,这样这些任务就不会出现在全局池队列的末尾



我们可以使用特殊的任务调度器将任务调度到此队列上。

是的,有多种方法。然而,为什么您首先会发现自己的线程池线程用完了呢?也许值得一看,在哪里可以使用异步I/O而不是阻塞I/O?这个“看门狗”是否在其专用线程上运行?@Magnus:它在专用线程上运行,而不是从线程池运行,但它会等待,直到收到来自线程池线程的消息。线程池是否仅用于此任务?这是一个计划的任务,应该每500毫秒启动一次,并且可能会有更多的并发实例?@user3360241:不,theadpool在几个地方都有使用。是的,有很多方法。然而,为什么您首先会发现自己的线程池线程用完了呢?也许值得一看,在哪里可以使用异步I/O而不是阻塞I/O?这个“看门狗”是否在其专用线程上运行?@Magnus:它在专用线程上运行,而不是从线程池运行,但它会等待,直到收到来自线程池线程的消息。线程池是否仅用于此任务?这是一个计划的任务,应该每500毫秒启动一次,并且可能会有更多的并发实例?@user3360241:不,theadpool在几个地方都有使用。是的,有很多方法。然而,为什么您首先会发现自己的线程池线程用完了呢?也许值得一看,在哪里可以使用异步I/O而不是阻塞I/O?这个“看门狗”是否在其专用线程上运行?@Magnus:它在专用线程上运行,而不是从线程池运行,但它会等待,直到收到来自线程池线程的消息。线程池是否仅用于此任务?这是一个计划的任务,应该每500毫秒启动一次,并且可能会有更多的并发实例?@user3360241:不,theadpool在几个地方都有使用。是的,有很多方法。然而,为什么您首先会发现自己的线程池线程用完了呢?也许值得一看,在哪里可以使用异步I/O而不是阻塞I/O?这个“看门狗”是否在其专用线程上运行?@Magnus:它在专用线程上运行,而不是从线程池运行,但它会等待,直到收到来自线程池线程的消息。线程池是否仅用于此任务?这是一个计划的任务,应该每500毫秒启动一次,并且可能会有更多的并发任务实例?@user3360241:不,theadpool在多个地方使用。我该怎么办?在这里放一个大数字,在SetMaxThreads中放一个更大的数字?那就行了?我该怎么办?在这里放一个大数字,在SetMaxThreads中放一个更大的数字?那就行了?我该怎么办?在这里放一个大数字,在SetMaxThreads中放一个更大的数字?那就行了?我该怎么办?在这里放一个大数字