C# 使用异步加速PI计算?

C# 使用异步加速PI计算?,c#,asynchronous,async-await,c#-5.0,pi,C#,Asynchronous,Async Await,C# 5.0,Pi,我有一个计算pi的方法。我只是想知道我是否可以使用C#5的异步/等待功能来加快速度 public decimal CalculatePi(int measure) { var target = measure; decimal current = 3; var incrementing = false; var inner = (decimal)1.0; whi

我有一个计算pi的方法。我只是想知道我是否可以使用C#5的异步/等待功能来加快速度

public decimal CalculatePi(int measure)
        {
            var target = measure;
            decimal current = 3;
            var incrementing = false;
            var inner = (decimal)1.0;
            while (current < target)
            {
                if (!incrementing)
                {
                    inner = inner - (1/current);
                    current += 2;
                    incrementing = true;
                }
                if (incrementing)
                {
                    inner = inner + (1/current);
                    current += 2;
                    incrementing = false;
                }

            }
            return 4*inner;
        }
public decimal CalculatePi(整数度量)
{
var目标=度量;
十进制电流=3;
var递增=假;
内部变量=(十进制)1.0;
while(当前<目标)
{
如果(!递增)
{
内部=内部-(1/电流);
电流+=2;
递增=真;
}
如果(递增)
{
内部=内部+(1/电流);
电流+=2;
递增=假;
}
}
返回4*内部;
}

在访问网络或硬盘等速度可能低于您所需的其他资源时,最好使用Async和await。在这样的纯处理器代码上使用它只会使您的代码与其他代码(启动此方法的原始调用代码)共享处理器,就像启动线程一样。要么是由于其他代码继续执行某些操作而减慢了速度,要么是其他代码命中等待并继续,就好像它是同步的一样。使用async/await没有什么大的好处。

async和await最好用于访问其他资源,如网络或硬盘驱动器,因为它们的速度可能比您想要的慢。在这样的纯处理器代码上使用它只会使您的代码与其他代码(启动此方法的原始调用代码)共享处理器,就像启动线程一样。要么是由于其他代码继续执行某些操作而减慢了速度,要么是其他代码命中等待并继续,就好像它是同步的一样。使用async/await没有什么大的好处。

我不知道PI本身的计算是否正确,但您的算法不是多线程的好选择


实际上,您的算法是顺序的,并且代码非常小。上下文切换将增加大量开销,并且您将失去任何好处。

我不知道PI本身的计算是否正确,但您的算法不是多线程的好选择


实际上,您的算法是顺序的,并且代码非常小。上下文切换将增加大量开销,您将失去任何好处。

如果您使用足够高的度量值,计算将在大约一百万分之一时开始更准确如果您使用足够高的度量值,它在1左右开始变得更精确Million@Cory-ogburn感谢您的反馈您可以使用
wait
,例如
任务来进行一些并行处理。虽然所有的
-但是CPU密集型并行算法最好通过TPL来完成(这反过来可以公开一个
异步
友好的
任务
,因此整个TPL处理过程可以
等待
)。此外,在现代系统上,几乎总是有两个或两个以上的处理器,因此即使是基本的并行性也可以获得一些简单的性能提升。@Cory ogburn感谢您的反馈。您可以使用
wait
,例如
Task来执行一些并行处理。虽然所有的
,但CPU密集型并行算法最好通过TPL来完成(这反过来可以公开一个
异步
友好的
任务
,因此整个TPL处理过程可以
等待
)。此外,在现代系统上几乎总是有两个或更多处理器,因此即使是基本的并行也可以轻松获得一些性能增益。