Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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# 通过生成线程来增加CPU的压力_C#_.net_Multithreading_Concurrency - Fatal编程技术网

C# 通过生成线程来增加CPU的压力

C# 通过生成线程来增加CPU的压力,c#,.net,multithreading,concurrency,C#,.net,Multithreading,Concurrency,我正在开发一个应用程序,我们将用它来模拟在系统上工作的用户。目标之一是通过让许多用户执行任务来对应用程序进行压力测试 此时,用户只是一个后台工作人员。现在,无论我产生了多少“用户”,核心的CPU负载永远不会超过上限 现在,我对线程非常陌生,但我最好的猜测是这是由于硬件限制,在本例中,是4核。核心开始工作,之后只是时间问题 有没有办法解决这个问题?我想尽可能强调所有核心 除了等待线程中的I/O操作完成之外,CPU没有太多的事情要做。VS2010具有非常好的负载测试功能。我的一个同事写了一篇关于模拟

我正在开发一个应用程序,我们将用它来模拟在系统上工作的用户。目标之一是通过让许多用户执行任务来对应用程序进行压力测试

此时,用户只是一个后台工作人员。现在,无论我产生了多少“用户”,核心的CPU负载永远不会超过上限

现在,我对线程非常陌生,但我最好的猜测是这是由于硬件限制,在本例中,是4核。核心开始工作,之后只是时间问题


有没有办法解决这个问题?我想尽可能强调所有核心

除了等待线程中的I/O操作完成之外,CPU没有太多的事情要做。

VS2010具有非常好的负载测试功能。我的一个同事写了一篇关于模拟多用户的博客文章。其基础是围绕用户执行的最常见操作编写一些单元测试,然后让VS负载测试为您执行多用户工作。

这完全取决于操作系统调度算法和CLR(因为它隐藏了一些低级细节)。为了允许多个线程在所有线程和中断之间运行OS片处理器时间

此代码应为测试提供足够的压力,如果不需要,则可能需要选择C++或C</P>

int nCores = 4;
for (int i = 0; i < nCores;i++ )
{
    var t = new Thread(() =>
                        {
                            while (true)
                            {
                            }
                        });
    t.Priority = ThreadPriority.Highest;
    t.Start();
}
int nCores=4;
for(int i=0;i
{
while(true)
{
}
});
t、 优先级=线程优先级。最高;
t、 Start();
}

下面是我使用的测试代码

它为系统上报告的每个CPU创建一个线程,并使每个线程旋转,除非您限制它

loadLevel变量通常由范围为0..100的滚动条设置

Thread[] cpuLoadThread;
public Form1()
{
    InitializeComponent();

    cpuLoadThread = new Thread[Environment.ProcessorCount];

    for(int i = 0; i < cpuLoadThread.Length; i++)
    {
        cpuLoadThread[i] = new Thread(new ThreadStart(cpuLoadProc));

        cpuLoadThread[i].IsBackground = true;
        cpuLoadThread[i].Name = "CPU Load Thread";
        cpuLoadThread[i].Start();
    }

}


void cpuLoadProc()
{
    System.Diagnostics.Stopwatch stopWatch = new System.Diagnostics.Stopwatch();
    stopWatch.Start();

    while (true)
    {
        if (stopWatch.ElapsedMilliseconds > loadLevel)
        {
            Thread.Sleep(100 - loadLevel);
            stopWatch.Reset();
            stopWatch.Start();
        }
    }
}
Thread[]cpuLoadThread;
公共表格1()
{
初始化组件();
cpuLoadThread=新线程[Environment.ProcessorCount];
对于(int i=0;iloadLevel)
{
线程睡眠(100-负载级别);
秒表复位();
秒表。开始();
}
}
}

您正在使用visual studio express吗?express版本仅支持单核应用程序这些任务是CPU繁重还是执行IO?一次生成了多少个这样的任务?您看到了什么CPU级别?基本上它是一个SOA应用程序。我们试图通过模拟用户在应用程序上工作来确定应用程序的各种最大值。你的平均任务是基本积垢。一切都按预期进行,我只是想弄清楚是否有可能让“CPU做得更多”。那么,在线程中你会做什么,哪些是CPU密集型的?我不知道。我没有问这个问题。我只是指出,没有提到用户任务是I/O绑定的,他描述的是等待服务器响应的模拟客户端。我就是这样解释的。因此,客户不会做太多事情,而是等待回应。这就像一种魅力。谢谢!