ailen1954 2020-08-16 11:37 采纳率: 100%
浏览 146
已采纳

C#疑难杂症:增加线程,无法提高程序执行性能,但是增加进程可以;线程执行未加锁,附代码

  • 1进程100线程,占用CPU 20%多;(如果开4个进程,则CPU占用可以增加到90%左右;证明进程之间是互不干扰的)
  • 1进程400线程,占用CPU还是20%;CPU占用应该增加4倍才对啊?(线程之间未加锁)

被这个问题困扰了好久,为什么1个进程400线程CPU不能占用到90%左右?

图片说明

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace Question_CsharpSplit
{
    class Program
    {
        static void Main(string[] args) {
            //产生一字符串,大小1MB
            StringBuilder tStr = new StringBuilder();
            while (tStr.Length < 1024 * 1024 * 1) {
                tStr.Append(DateTime.Now.Ticks.ToString() + "|");
            }

            //多线程执行
            long countTemp = 0;
            DateTime dtStart = DateTime.Now;
            Thread[] tdTemp = new Thread[100];
            for (int i = 0; i < tdTemp.Length; i++) {
                tdTemp[i] = new Thread(new ThreadStart(() => {
                    while (true) {
                        countTemp++;
                        //【问题:为什么这里多线程占不满CPU?而多进程可以?】
                        string t = tStr.ToString();
                        string[] arrTemp = t.Split('|');
                    }
                }));
                tdTemp[i].Start();
            }

            //显示速度
            while (true) {
                Console.WriteLine((1.0 * countTemp / (DateTime.Now - dtStart).TotalSeconds) + "/s");
                Thread.Sleep(1000);
            }
        }
    }
}

  • 写回答

3条回答 默认 最新

  • threenewbee 2020-08-16 12:00
    关注

    你的线程调用,主要的代码是
    string t = tStr.ToString();
    string[] arrTemp = t.Split('|');
    这两个函数作为线程安全的函数,内部存在同步,所以可能并不能并行执行。
    你可以看下任务管理器的cpu占用。
    多进程不存在同步的问题,所以可以并行。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试