Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.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

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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.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# 在四核上使用线程将代码速度提高65%?_C#_Multithreading_Multicore - Fatal编程技术网

C# 在四核上使用线程将代码速度提高65%?

C# 在四核上使用线程将代码速度提高65%?,c#,multithreading,multicore,C#,Multithreading,Multicore,此示例在四核处理器上比较串行方法和线程方法。代码仅使用GetPixel()读取4幅图像中的所有像素。 我发现速度大约是65%,为什么它不等于75%,因为我有4个内核,而且它们都被充分利用了 附言: 你能检查一下代码吗?因为我不做任何I/O,机器上也没有其他进程(正常的windows进程)可能有很多事情。我想到的一对 管理不同线程的开销 其他进程正在同时使用系统中的资源 最有可能的情况是,它必须在某些数据结构或文件上与其他线程竞争,这样您就无法获得100%的并行执行 例如,如果您要在四核上以4路并

此示例在四核处理器上比较串行方法和线程方法。代码仅使用GetPixel()读取4幅图像中的所有像素。 我发现速度大约是65%,为什么它不等于75%,因为我有4个内核,而且它们都被充分利用了

附言:


你能检查一下代码吗?因为我不做任何I/O,机器上也没有其他进程(正常的windows进程)

可能有很多事情。我想到的一对

  • 管理不同线程的开销
  • 其他进程正在同时使用系统中的资源

  • 最有可能的情况是,它必须在某些数据结构或文件上与其他线程竞争,这样您就无法获得100%的并行执行

    例如,如果您要在四核上以4路并行方式运行从网站下载网页的操作类型,并且服务器一次只允许从同一IP地址同时下载一个网页,那么您根本不会得到任何加速


    也有一些开销涉及线程的旋转和维护,所以当你开始并行时,你不会得到一个完整的内核的使用,尽管在这种情况下它可能不是一个很大的因素。

    < P>因为还有其他因素要考虑。如内存和I/O带宽/争用、线程上下文切换开销等

  • 您正在操作系统中运行它。还有其他进程正在运行。这些将占用一些CPU时间
  • 也许你不再是CPU受限,而是IO受限(内存带宽、磁盘带宽等)
  • 线程(和线程切换)、编组等总是会有一些开销

  • 总的来说,根据我的并行编程经验,如果运行时间减少65%,那就很好了。

    线程有开销,并且不是所有的东西都可以并行运行

    • 创建/启动/停止线程的时间
    • 完成的额外工作(如锁定/递增)
    • 并非所有资源都可以完全并行化,例如内存访问或读/写文件
    • 操作系统和其他应用程序可能偶尔需要一些处理器时间

    我确信没有其他进程严重使用处理器。线程管理很可能导致预期性能下降。大量RAM受到影响,CPU将开始争夺总线。