首页 > 学院 > 开发设计 > 正文

线程系列02,多个线程同时处理一个耗时较长的任务以节省时间

2019-11-17 02:52:54
字体:
来源:转载
供稿:网友

线程系列02,多个线程同时处理一个耗时较长的任务以节省时间

当面对一个耗时较长的任务时,我们可以把这个任务切分成多个部分,然后同时交给多个线程处理。

□ 统计字节数组一个比较耗时的方式

以下来统计一个字节数组的大小。

    class PRogram
    {
        static byte[] values = new byte[500000000];
        static void Main(string[] args)
        {
            GenerateByteArray();
            Console.WriteLine("正在统计字节数");
            Stopwatch watch = new Stopwatch();
            watch.Start();
            long total = 0;
            for (int i = 0; i < values.Length; i++)
            {
                total += values[i];
            }
            watch.Stop();
            Console.WriteLine("统计结果为:" + total);
            Console.WriteLine("计算时间为:" + watch.Elapsed);
        }
        static void GenerateByteArray()
        {
            var r = new Random(987);
            for (int i = 0; i < values.Length; i++)
            {
                values[i] = (byte)r.Next(10);
            }
        }
    }

3

如果把统计工作同时交给多个线程,是否可以把统计时间省下来呢?

□ 同时使用多个线程

现在要对"统计字节数组大小"这个任务进行均分、切分。首先面临的问题是:按什么标准均分?--这个完全是靠个人喜好,可以让2个线程,3个线程......来处理。在这里,就根据CPU的数量来均分,因为CPU的数量可以通过Environment.ProcessorCount获得。

面临的第二问题是:均分什么?--比如有4个CPU--那可以把任务分成4个线程同时处理--把字节数组的长度均分,比如字节数组的长度是1000,均分成4段,每段长度为250--把字节数组的大小分成4个放一个数组里,即[sum1, sum2, sum3, sum4],所有的元素加起来就是字节数组的总大小

    class Program
    {
        static byte[] values = new byte[500000000];
        //分段统计的大小放该数组,比如分成4等份,[10000,10005,10008,10009]
        private static long[] partialSum; 
        //把values数组长度均等分,比如长度1000,分成4粉,那partialSize就是250
        private static int partialSize;
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表