经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C# » 查看文章
C#实现多线程的几种方式
来源:cnblogs  作者:追逐时光者  时间:2024/5/11 8:53:14  对本文有异议

前言

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

多线程常用场景

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

什么是进程?

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

什么是线程?

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

使用 Thread 类

  1.         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 类

  1.         public static void ThreadPoolMethod()
            {
                ThreadPool.QueueUserWorkItem(=> 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 类

  1.         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 类

  1.         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技术社区微信交流群????????

原文链接:https://www.cnblogs.com/Can-daydayup/p/18185545

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号