• 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技术社区微信交流群👨‍👩‍👦

  • 相关阅读:
    MAC版idea如何安装maven?
    使用Eclipse搭建SpringBoot项目
    整体记录一下asp.net core 认证和授权
    【愚公系列】2022年11月 .NET CORE工具案例-CSRedis执行Lua脚本实现商品秒杀
    R语言 复习 习题图片
    YOLOv8改进:HIC-YOLOv8复现魔改HIC-YOLOv5,助力小目标检测(Small Object Detection)
    py 时候同时打开多个页面,操作多个页面
    openGauss每日一练第1天 | openGauss数据库状态查看
    (三)组合特征与特征变换 学习简要笔记 #机器学习特征工程 #CDA学习打卡
    基于JAVA动物大全和智能识别系统(Springboot框架+AI人工智能) 开题报告
  • 原文地址:https://www.cnblogs.com/Can-daydayup/p/18185545