zoukankan      html  css  js  c++  java
  • 初探并行线程的三种写法

    为什么想要了解并行程序的写法,源自上学期间有一个算法需要处理很多的地震道记录,在处理地震道的时候各道的数据是不关联的,

    因此是两个for循环X,Y方向的地震道数据,然后计算,自然速度就慢了。

    那么如果对于计算密集型的处理程序,并行计算就成了好的选择。

    在C#中的三种写法:参考资料

            static void Main(string[] args)
            {
                //方法1
                Parallel.For(1, 11, x =>
                {
                    Console.WriteLine(x);
                });
                Console.WriteLine("-------");
                //方法2
                var nums = Enumerable.Range(20, 30);
                Parallel.ForEach(nums, x =>
                {
                    Console.WriteLine(x);
                });
                Console.WriteLine("-------");
                //方法3
                Parallel.Invoke(
                    new Action(func1),//1
                    new Action(func1),//2
                    new Action(func1),//3
                    new Action(func1),//4
                    new Action(func1),//5
                    new Action(func1),//6
                    new Action(func1),//7
                    new Action(func1)//8
                );
                //Console.ReadKey();
            }
            public static void func1()
            {
                long x = (long)Math.Pow(10, 10);
                for (int i = 0; i < x; i++)
                {
                    Console.WriteLine("内部线程" + i);
                }
            }

    这里比较灵活的写法是方法三:

    使用的委托调用需要处理的函数,fuc1是一个计算耗时函数

    我在例子中调用了8个函数,我的电脑是I7-7700

    是八核,跑起来程序是直接CPU100%

    如果注释掉其中的四行代码,只跑4个耗时函数

    那么CPU的使用是50%

    相比于单线程计算,并行确实能提高时间效率。

    但是也要注意,不要执行太多耗时任务,否则对计算机压力太大。

    End

  • 相关阅读:
    设计模式之设计原则
    把二叉树打印成多行
    快速排序的递归遍历和非递归遍历
    二叉树的非递归遍历
    约瑟夫环问题
    strcpy strcat strcmp memcpy函数的自己实现
    【解题模板】一些很基础的板子
    【笔记】取模运算的用法
    【OJ技巧】DSACPP pa-book中的一些提示
    【编程语言】Java基础进阶——面向对象部分
  • 原文地址:https://www.cnblogs.com/LeeSki/p/12188200.html
Copyright © 2011-2022 走看看