当前位置: 首页 > news >正文

每天5分钟玩转C#/.NET之C#实现多线程的4种方式

前言

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


http://www.mrgr.cn/news/57653.html

相关文章:

  • 基于springboot+vue实现的健身房管理系统 (源码+L文+ppt)4-097
  • kali的下载与配置
  • 计算机网络 谢希仁第8版 第四章概念总结
  • C#学习笔记(五)
  • 【论文阅读】03-Diffusion Models and Representation Learning: A Survey
  • dynadot设置域名动态DNS(DDNS)
  • 1024-git忽略文件
  • 如何部署微信碰一下支付系统源码?详细教程!
  • 392. 判断子序列
  • Navict的入门使用
  • springboot069视频网站系统的设计与实现(论文+源码)_kaic
  • List、Set、数据结构、Collections
  • LeetCode 2730.找到最长的半重复子字符串
  • 怎么消除背景音乐保留人声?让人声清晰可辨
  • Stable Diffusion 3.5发布:图像生成新纪元,多模态AI的突破!
  • 深入浅出神经网络:从基础原理到高级应用
  • Redis 哨兵模式
  • 文字识别接口应用场景解析-身份证识别、发票识别API、车牌识别
  • 智能听诊器革新宠物健康监测
  • 快速上手学习API接口和应用开发
  • SAP 数据以0.5为基数向下取整
  • **KAMA指标**,用于衡量股价趋势的一个技术分析指标
  • 【T+】畅捷通T+软件更新补丁提示当前系统中没有安装T+产品
  • pandas_profiling :教你一行代码生成数据分析报告
  • 【002】基于springboot的医护人员排班系统
  • SpringBoot poi-tl通过模板占位符生成word文件