翼度科技»论坛 编程开发 .net 查看内容

.NET中的多线程-并行编程

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
.NET中的多线程-并行编程

在.NET框架中,多线程编程可以提高程序的性能和并发能力。.NET框架提供了一系列的类和API,用于简化多线程编程。本文将介绍.NET中的多线程-并行编程,并给出一些示例代码。
什么是多线程?

多线程是指一个进程中有多个线程同时执行。每个线程都是独立的执行路径,可以同时执行不同的代码。多线程编程可以提高程序的性能和响应速度,特别是在处理大量数据或者需要长时间等待的任务时。
.NET中的多线程-并行编程

在.NET中,可以使用System.Threading命名空间中的类和API进行多线程编程。下面是一些常用的类和API:

  • Thread类:表示一个执行线程,可以使用它创建一个新线程并启动执行。
  • ThreadPool类:表示一个线程池,可以用于管理一组可重复使用的线程。
  • Task类:表示一个可以异步执行的操作,可以使用它来实现异步编程。
  • Parallel类:表示一个并行计算库,可以用于执行并行循环、并行LINQ查询等。
    下面是一些示例代码,演示如何使用这些类和API。
使用Thread类创建线程

我们使用Thread类手动创建和启动了一个线程,实现了简单的并行计算。下面是一个示例代码:
  1. using System;
  2. using System.Threading;
  3. class Program
  4. {
  5.     static void Main()
  6.     {
  7.         // 创建一个新线程
  8.         Thread thread = new Thread(new ThreadStart(DoWork));
  9.         // 启动线程执行
  10.         thread.Start();
  11.         // 等待线程执行完成
  12.         thread.Join();
  13.         Console.WriteLine("主线程结束。");
  14.         Console.ReadKey();
  15.     }
  16.     static void DoWork()
  17.     {
  18.         Console.WriteLine("子线程开始执行。");
  19.         Thread.Sleep(1000); // 模拟执行1秒钟
  20.         Console.WriteLine("子线程执行完成。");
  21.     }
  22. }
复制代码
这个示例演示了如何使用Thread类创建和启动线程。在Main方法中,我们首先创建了一个Thread对象,将要执行的方法DoWork作为参数传递给Thread构造函数,然后调用Thread.Start方法启动线程。DoWork方法会在新线程中执行,执行过程中会输出一些信息,然后调用Thread.Sleep方法模拟线程执行了1秒钟的操作,最后线程结束执行。
使用ThreadPool类创建线程池

使用ThreadPool类自动管理线程池,执行多个工作项,也实现了简单的并行计算。下面是一个示例代码:
  1. using System;
  2. using System.Threading;
  3. class Program
  4. {
  5.     static void Main()
  6.     {
  7.         // 向线程池添加工作项
  8.         ThreadPool.QueueUserWorkItem(DoWork, "工作项1");
  9.         ThreadPool.QueueUserWorkItem(DoWork, "工作项2");
  10.         Console.WriteLine("主线程结束。");
  11.         Console.ReadKey();
  12.     }
  13.     static void DoWork(object state)
  14.     {
  15.         Console.WriteLine("工作项开始执行:" + state);
  16.         Thread.Sleep(1000); // 模拟执行1秒钟
  17.         Console.WriteLine("工作项执行完成:" + state);
  18.     }
  19. }
复制代码
这个示例演示了如何使用ThreadPool类执行多个工作项。在Main方法中,我们首先调用ThreadPool.QueueUserWorkItem方法,将要执行的方法DoWork作为参数传递给方法。ThreadPool会自动管理线程池中的线程,从而执行DoWork方法。DoWork方法会在一个新的线程中执行,执行过程中会输出一些信息,然后调用Thread.Sleep方法模拟线程执行了1秒钟的操作,最后线程结束执行。
使用Task类实现异步编程

使用Task类实现异步编程,让CPU在等待异步操作完成的时间内可以执行其他任务,从而提高CPU的利用率,也实现了简单的并行计算,避免阻塞UI线程。下面是一个示例代码:
  1. using System;
  2. using System.Threading.Tasks;
  3. class Program
  4. {
  5.     static void Main()
  6.     {
  7.         Console.WriteLine("开始异步操作。");
  8.         Task.Run(() => DoWork());
  9.         Console.WriteLine("异步操作已启动。");
  10.         Console.ReadKey();
  11.     }
  12.     static void DoWork()
  13.     {
  14.         Console.WriteLine("异步操作开始执行。");
  15.         Task.Delay(1000).Wait(); // 模拟执行1秒钟
  16.         Console.WriteLine("异步操作执行完成。");
  17.     }
  18. }
复制代码
这个示例演示了如何使用Task类实现异步编程。在Main方法中,我们使用Task.Run方法创建一个异步操作,将要执行的方法DoWork作为参数传递给方法。异步操作会在一个新的线程中执行,执行过程中会输出一些信息,然后调用Task.Delay方法模拟异步操作执行了1秒钟的操作,最后异步操作完成执行。
使用Parallel类执行并行计算

使用Parallel类对数组进行并行计算求和,利用了多个处理器的计算能力,提高了程序的执行效率。下面是一个示例代码:
  1. using System;
  2. using System.Linq;
  3. using System.Threading.Tasks;
  4. class Program
  5. {
  6.     static void Main()
  7.     {
  8.         int[] data = Enumerable.Range(0, 10000000).ToArray();
  9.         // 使用并行计算求和
  10.         long sum = 0;
  11.         Parallel.ForEach(data, x => { Interlocked.Add(ref sum, x); });
  12.         Console.WriteLine("和为:" + sum);
  13.         Console.ReadKey();
  14.     }
  15. }
复制代码
这个示例演示了如何使用Parallel类执行并行计算。在Main方法中,我们首先使用Enumerable.Range方法创建一个长度为10000000的整型数组data,然后使用Parallel.ForEach方法对数组进行并行计算求和。Parallel.ForEach方法会自动将数组分成多个部分,并在多个线程中执行计算操作,最后将结果累加得到最终结果。
总结

在.NET框架中,多线程编程可以提高程序的性能和并发能力。.NET框架提供了一系列的类和API,用于简化多线程编程。本文介绍了.NET中的多线程-并行编程,并给出了一些示例代码,希望对大家有所帮助。
参考文献


来源:https://www.cnblogs.com/ke210/archive/2023/04/09/17300202.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具