Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.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_Performance_Operating System - Fatal编程技术网

C# 根据系统规格确定要使用的最有效线程数

C# 根据系统规格确定要使用的最有效线程数,c#,.net,multithreading,performance,operating-system,C#,.net,Multithreading,Performance,Operating System,如何为给定系统确定用于操作的最大/正确线程数?我有一个可以用1到100个线程完成的操作。我可以运行一些测试,找出哪一个是最有效的,但这似乎在很大程度上取决于用户的系统 这是否有先例,取决于内核、操作系统等的数量 我在C#.NET中工作,但我不确定这会有什么不同。在一个完美的程序中,你应该使用的线程数就是你拥有的处理器数 没有简单的规则,这完全取决于这些线程在做什么。如果他们烧芯,那么理想的数量永远不会超过机器可用的芯数。添加更多只会为操作系统在它们之间切换上下文提供额外的工作 但是,如果它们执行

如何为给定系统确定用于操作的最大/正确线程数?我有一个可以用1到100个线程完成的操作。我可以运行一些测试,找出哪一个是最有效的,但这似乎在很大程度上取决于用户的系统

这是否有先例,取决于内核、操作系统等的数量


我在C#.NET中工作,但我不确定这会有什么不同。

在一个完美的程序中,你应该使用的线程数就是你拥有的处理器数

没有简单的规则,这完全取决于这些线程在做什么。如果他们烧芯,那么理想的数量永远不会超过机器可用的芯数。添加更多只会为操作系统在它们之间切换上下文提供额外的工作

但是,如果它们执行任何I/O操作,那么它们将被阻塞很多时间,等待I/O完成。在这种情况下,理想情况可能更大,但完全取决于I/O子系统中的并发性

理想往往只是其中之一。如果线程执行完全由一个资源绑定,那么这种情况就是机器只有一个资源。就像内存总线或磁盘一样


你得测量一下。查看维基百科文章,选择曲线变平的数字。请注意缓存效果,这些效果会使您的程序看起来比实际情况要好。类似于反复运行磁盘绑定程序,并实际从文件系统缓存而不是磁盘获取数据。

默认情况下,来自.NET framework 4.5的线程池根据可用内核的数量设置要使用的最小线程数,如下所述:在优化线程池部分,并将添加或者,如果它认为这将带来更好的吞吐量,那么就退出线程

您还可以手动设置要使用的最小线程数和最大线程数,在您的情况下是1和100

文件:

您想根据条件(CPU负载、内存…)为每个用户系统进行自定义吗?那么,一个完美的程序没有I/O吗?如果它没有I/O,您如何知道它是完美的?