C# 在四核上使用线程将代码速度提高65%?
此示例在四核处理器上比较串行方法和线程方法。代码仅使用GetPixel()读取4幅图像中的所有像素。 我发现速度大约是65%,为什么它不等于75%,因为我有4个内核,而且它们都被充分利用了 附言:C# 在四核上使用线程将代码速度提高65%?,c#,multithreading,multicore,C#,Multithreading,Multicore,此示例在四核处理器上比较串行方法和线程方法。代码仅使用GetPixel()读取4幅图像中的所有像素。 我发现速度大约是65%,为什么它不等于75%,因为我有4个内核,而且它们都被充分利用了 附言: 你能检查一下代码吗?因为我不做任何I/O,机器上也没有其他进程(正常的windows进程)可能有很多事情。我想到的一对 管理不同线程的开销 其他进程正在同时使用系统中的资源 最有可能的情况是,它必须在某些数据结构或文件上与其他线程竞争,这样您就无法获得100%的并行执行 例如,如果您要在四核上以4路并
你能检查一下代码吗?因为我不做任何I/O,机器上也没有其他进程(正常的windows进程)可能有很多事情。我想到的一对
最有可能的情况是,它必须在某些数据结构或文件上与其他线程竞争,这样您就无法获得100%的并行执行 例如,如果您要在四核上以4路并行方式运行从网站下载网页的操作类型,并且服务器一次只允许从同一IP地址同时下载一个网页,那么您根本不会得到任何加速
也有一些开销涉及线程的旋转和维护,所以当你开始并行时,你不会得到一个完整的内核的使用,尽管在这种情况下它可能不是一个很大的因素。
< P>因为还有其他因素要考虑。如内存和I/O带宽/争用、线程上下文切换开销等
总的来说,根据我的并行编程经验,如果运行时间减少65%,那就很好了。线程有开销,并且不是所有的东西都可以并行运行
- 创建/启动/停止线程的时间
- 完成的额外工作(如锁定/递增)
- 并非所有资源都可以完全并行化,例如内存访问或读/写文件
- 操作系统和其他应用程序可能偶尔需要一些处理器时间