C#实现多线程的几种方式

前言

多线程是C#中一个重要的概念,多线程指的是在同一进程中同时运行多个线程的机制。多线程适用于需要提高系统并发性、吞吐量和响应速度的场景,可以充分利用多核处理器和系统资源,提高应用程序的性能和效率。

多线程常用场景

  • CPU 密集型任务.
  • I/O 密集型任务.
  • 并发请求处理.
  • 大数据处理等.

什么是进程?

进程(Process)是计算机中的一个执行中的程序,它是对正在运行的程序的抽象。一个进程包括了程序的代码、数据、堆栈以及其他操作系统所需的资源。

什么是线程?

线程(Thread)是进程中的一个执行单元,一个进程可以包含多个线程,它们共享进程的资源,但拥有独立的执行流程。

使用 Thread 类

复制代码
`        public static void ThreadMethod()`
`        {`
`            var newThread = new Thread(WorkerMethod);`
`            newThread.Start();`

`            for (int i = 0; i < 8; i++)`
`            {`
`                Console.WriteLine($"ThreadMethod 主线程开始工作:{i}");`
`                Thread.Sleep(100);`
`            }`
`        }`
`        `
`        private static void WorkerMethod()`
`        {`
`            for (int i = 0; i < 8; i++)`
`            {`
`                Console.WriteLine($"WorkerMethod 辅助线程开始工作:{i}");`
`                Thread.Sleep(100);`
`            }`
`        }`

使用 ThreadPool 类

复制代码
`        public static void ThreadPoolMethod()`
`        {`
`            ThreadPool.QueueUserWorkItem(o => WorkerMethod());`

`            for (int i = 0; i < 8; i++)`
`            {`
`                Console.WriteLine($"ThreadPoolMethod 主线程开始工作:{i}");`
`                Thread.Sleep(100);`
`            }`
`        }`
`        `
`        private static void WorkerMethod()`
`        {`
`            for (int i = 0; i < 8; i++)`
`            {`
`                Console.WriteLine($"WorkerMethod 辅助线程开始工作:{i}");`
`                Thread.Sleep(100);`
`            }`
`        }`

使用 Task 类

复制代码
`        public static void TaskMethod()`
`        {`
`            Task.Run(() => WorkerMethod());`

`            for (int i = 0; i < 8; i++)`
`            {`
`                Console.WriteLine($"TaskMethod 主线程开始工作:{i}");`
`                Task.Delay(100).Wait();`
`            }`
`        }`
`        `
`        private static void WorkerMethod()`
`        {`
`            for (int i = 0; i < 8; i++)`
`            {`
`                Console.WriteLine($"WorkerMethod 辅助线程开始工作:{i}");`
`                Thread.Sleep(100);`
`            }`
`        }`

使用 Parallel 类

复制代码
`        public static void ParallelMethod()`
`        {`
`            Parallel.Invoke(WorkerMethod, WorkerMethodOther1, WorkerMethodOther2);`
`        }`
`        `
`        private static void WorkerMethod()`
`        {`
`            for (int i = 0; i < 8; i++)`
`            {`
`                Console.WriteLine($"WorkerMethod 辅助线程开始工作:{i}");`
`                Thread.Sleep(100);`
`            }`
`        }`

`        private static void WorkerMethodOther1()`
`        {`
`            for (int i = 0; i < 8; i++)`
`            {`
`                Console.WriteLine($"WorkerMethodOther1 辅助线程开始工作:{i}");`
`                Thread.Sleep(100);`
`            }`
`        }`

`        private static void WorkerMethodOther2()`
`        {`
`            for (int i = 0; i < 8; i++)`
`            {`
`                Console.WriteLine($"WorkerMethodOther2 辅助线程开始工作:{i}");`
`                Thread.Sleep(100);`
`            }`
`        }`

拾遗补漏合集

在这个快速发展的技术世界中,时常会有一些重要的知识点、信息或细节被忽略或遗漏。《C#/.NET/.NET Core拾遗补漏》专栏我们将探讨一些可能被忽略或遗漏的重要知识点、信息或细节,以帮助大家更全面地了解这些技术栈的特性和发展方向。

GitHub开源地址

https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetStudy.md

拾遗补漏知识点投稿

该Issues主要是给各位小伙伴们提供投稿的地方,你有什么想要学习的C#/.NET/.NET Core相关技术栈或者已学习过且有文章输出的欢迎在投稿!

https://github.com/YSGStudyHards/DotNetGuide/issues/37

DotNetGuide技术社区交流群

  • DotNetGuide技术社区是一个面向.NET开发者的开源技术社区,旨在为开发者们提供全面的C#/.NET/.NET Core相关学习资料、技术分享和咨询、项目框架推荐、求职和招聘资讯、以及解决问题的平台。
  • 在DotNetGuide技术社区中,开发者们可以分享自己的技术文章、项目经验、学习心得、遇到的疑难技术问题以及解决方案,并且还有机会结识志同道合的开发者。
  • 我们致力于构建一个积极向上、和谐友善的.NET技术交流平台。无论您是初学者还是有丰富经验的开发者,我们都希望能为您提供更多的价值和成长机会。

欢迎加入DotNetGuide技术社区微信交流群👨‍👩‍👦

相关推荐
追逐时光者7 小时前
C#字符串拼接的几种方式及其性能分析对比
【.net】·【c#】·【.net core】·【拾遗补漏】
追逐时光者2 天前
一个.NET开源、易于使用的屏幕录制工具
【.net】·【开源项目】
追逐时光者3 天前
好消息,在 Visual Studio 中可以免费使用 GitHub Copilot 了!
【visual studio】·【.net】·【c#】·【实用工具】·【ai编程】
追逐时光者5 天前
基于.NET WinForm开发的一款硬件及协议通讯工具
【.net】·【开源项目】·【winform】
追逐时光者5 天前
一款基于 .NET MVC 框架开发、功能全面的MES系统
【.net】·【c#】·【开源项目】·【.net core】
追逐时光者7 天前
C#/.NET/.NET Core技术前沿周刊 | 第 17 期(2024年12.09-12.15)
【.net】·【c#】·【.net core】·【技术前沿周刊】
追逐时光者7 天前
C#正则表达式快速入门
【.net】·【c#】·【.net core】·【拾遗补漏】
追逐时光者11 天前
一套以用户体验出发的.NET8 Web开源框架
【.net】·【c#】·【开源项目】·【.net core】