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
C# Thread.Sleep(Timeout.Infinite)性能问题_C#_Multithreading_Sleep_Infinite - Fatal编程技术网

C# Thread.Sleep(Timeout.Infinite)性能问题

C# Thread.Sleep(Timeout.Infinite)性能问题,c#,multithreading,sleep,infinite,C#,Multithreading,Sleep,Infinite,主执行路径(主线程)将被分成两个执行路径(不同作业上的两个新线程),但不再需要主线程。我可以将一个任务分配给主线程并保存一个线程(一个任务由主线程执行,另一个任务由新线程执行),但我想知道将主线程置于无限睡眠线程中。睡眠(Timeout.infinite)是不是一个好方法。我的类将被多次实例化,如果处于无限睡眠状态的线程从操作系统获取资源,这对我来说是个坏消息。所有线程都占用资源,不管它们是否处于睡眠状态。所有线程都占用资源,不管它们是否处于睡眠状态。您创建的每个线程都占用堆栈空间。在Windo

主执行路径(主线程)将被分成两个执行路径(不同作业上的两个新线程),但不再需要主线程。我可以将一个任务分配给主线程并保存一个线程(一个任务由主线程执行,另一个任务由新线程执行),但我想知道将主线程置于无限睡眠
线程中。睡眠(Timeout.infinite)
是不是一个好方法。我的类将被多次实例化,如果处于无限睡眠状态的线程从操作系统获取资源,这对我来说是个坏消息。

所有线程都占用资源,不管它们是否处于睡眠状态。

所有线程都占用资源,不管它们是否处于睡眠状态。

您创建的每个线程都占用堆栈空间。在Windows上,默认为1MB。操作系统还可以使用其他内部内部数据结构来跟踪线程,这也会占用一些内存,但1MB堆栈肯定会是最大的资源消耗者


话虽如此,如果我们只讨论2个线程和3个线程,那么差别是相当小的。如果是200对300,那么你可能会有些担心。但是,如果要生成大量线程,最好使用某种线程池(比如说),而不是生成单个线程。

创建的每个线程都会占用堆栈空间。在Windows上,默认为1MB。操作系统还可以使用其他内部内部数据结构来跟踪线程,这也会占用一些内存,但1MB堆栈肯定会是最大的资源消耗者


话虽如此,如果我们只讨论2个线程和3个线程,那么差别是相当小的。如果是200对300,那么你可能会有些担心。但是,如果要生成大量线程,最好使用某种线程池(例如),而不是生成单个线程。

谢谢。我不能使用池,因为它是一个asp.net应用程序。@Xaqron:你仍然可以在asp.net应用程序中使用线程池,为什么你认为你不能?那么
Thread.Sleep(Timeout.Infinite)
在ASP.NET应用程序中是如何工作的呢?你在哪里进行这种“无限”睡眠?我在ASP.NET应用程序的某个地方读到,如果你将有许多线程(我的场景),那么在ASP.NET应用程序中使用线程池会使ASP.NET陷入饥饿,因为我们都知道它使用工作线程来处理请求。我在http处理程序的开头使用了无限循环,我将在另一个问题中描述整个场景,因为任何人都不喜欢冗长的模糊问题。谢谢。我不能使用池,因为它是一个asp.net应用程序。@Xaqron:你仍然可以在asp.net应用程序中使用线程池,为什么你认为你不能?那么
Thread.Sleep(Timeout.Infinite)
在ASP.NET应用程序中是如何工作的呢?你在哪里进行这种“无限”睡眠?我在ASP.NET应用程序的某个地方读到,如果你将有许多线程(我的场景),那么在ASP.NET应用程序中使用线程池会使ASP.NET陷入饥饿,因为我们都知道它使用工作线程来处理请求。我在http处理程序的开头使用了无限循环,我将在另一个问题中描述整个场景,因为任何人都不喜欢冗长含糊的问题。在哪个任务上使用主线程或新线程有什么区别/标准吗?(假设这是一个ASP.NET应用程序)在哪个任务上使用主线程或新线程有什么区别/标准吗?(假设这是一个ASP.NET应用程序)