C#实现多线程的几种方式,你知道几种?

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

前言

多线程是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);
            }
        }

图片图片

GitHub开源地址

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

责任编辑:武晓燕 来源: 追逐时光者
相关推荐

2021-05-07 16:19:36

异步编程Java线程

2024-04-24 11:24:43

C#数据去重

2024-02-05 12:08:07

线程方式管理

2024-04-01 11:30:57

C#拷贝

2022-05-27 06:57:50

Python循环方式生成器

2021-08-05 07:28:25

Java实现方式

2018-02-08 09:04:58

Nginx404页面方法

2010-08-31 09:46:23

C#

2023-12-27 12:12:35

NumPy函数数组

2019-07-23 15:56:56

Spring Boot部署servlet

2023-10-30 11:53:37

继承JS父类

2021-07-09 07:00:27

SpringbootServlet容器

2019-07-23 17:52:59

Spring BootJava开发

2024-02-26 08:04:38

ReactReact.js场景

2021-10-07 20:36:45

Redis集群场景

2023-02-08 08:43:55

前端继承原型

2020-09-07 08:00:48

2020-09-28 14:24:09

字典Dictionary遍历

2022-03-28 20:57:31

私有属性class属性和方法

2010-08-05 09:39:17

Flex页面跳转
点赞
收藏

51CTO技术栈公众号