C#高级 01.Net多线程

一.基本概念

1.什么是线程?

  • 线程是操作系统中能独立运行的最小单位,也是程序中能并发执行的一段指令序列
  • 线程是进程的一部分,一个进程可以包含多个线程,这些线程共享进程资源
  • 进程有线程入口,也可以创建更多的线程
    2.为什么要有多线程?
  • 批量重复任务希望同时进行(重复访问数组中的元素)
  • 多个不同任务希望同时进行,互不打扰(多个线程需要做轮询操作)
    3.什么是线程池?
  • 一组预设创建的线程,可以被重复使用来执行多个任务
  • 避免频繁的创建和销毁线程,减少线程创建和销毁开销,提高系统性能和效率
  • 异步编程默认使用线程池
    4.什么是线程安全?
  • 线程安全:多个线程访问共享资源时,对共享资源的访问会导致数据不一致或者不可预期的结果。
  • 同步机制:用于协调多个线程之间执行顺序和互斥访问共享资源,确保线程按照特定的顺序执行,避免竞态条件和数据不一致问题
  • 原子操作:执行过程中不会被中断的操作,只能完全执行和完全不执行,不存在中间状态;多线程环境下,原子操作能保证数据的一致性和可靠性。
    5.实现方式
  • 线程:thread
  • 线程池:threadpool
  • 异步编程: async await
  • 自带方法: Parallel(For、Foreach、Invoke)PLINQ(AsParallel、AsSequential、AsOrdered)

二:线程池

1.线程的创建

  • 创建Thread实例,并传入ThreadStart委托--->还可以配置线程,如是否为后台线程(Deamon = true)
  • 调用Thread.Start方法
    2.线程终止
  • 调用Thread.Join方法,等待线程结束
  • 调用Thread.Interrupt方法,终端线程执行
    3.线程的挂起与恢复
  • thread.Suspend以及Thread.Resume
  • 较新版本.NET中,这两个方法已经被标记为Obsolete,且调用会报错
  • 推荐使用锁、信号灯方式实现这一逻辑

三:线程安全与同步机制 Thread-Safety

  • 原子操作
  • 锁与信号量
    lock & Monitor
    Mutex
    Semaphore
    WaitHandle
    ManualResetEvent
    AutoResetEvent
    ReaderWriterLock
  • 轻量级
    SemaphoreSlim
    ManualResetEventSlim
    ReaderWriterLockSlim
  • 不要自己造轮子
    线程安全的单例:Lazy
    线程安全的集合类型:ConcurrentBag、ConcurrentStack、ConcurrentQueue、ConcurrentDictionary
    阻塞集合:BlockingCollection
    通道:Channel
    原子操作:Interlocked
    周期任务:PeriodicTimer
相关推荐
dengzhenyue41 分钟前
C# 初级编程
开发语言·c#
津津有味道9 小时前
ISO18000-6C协议UHF6C超高频RFID读写C#源码
c#·uhf6c·超高频·iso18000-6c
白雪公主的后妈9 小时前
Auto CAD二次开发——创建圆弧对象
c#·cad二次开发·创建圆弧对象
weixin_3077791312 小时前
C#程序实现将MySQL的存储过程转换为Azure Synapse Dedicated SQL Pool的T-SQL存储过程
c#·自动化·云计算·运维开发·azure
"菠萝"13 小时前
C#知识学习-018(方法参数传递)
学习·c#·1024程序员节
CiLerLinux14 小时前
第三章 FreeRTOS 任务相关 API 函数
开发语言·单片机·物联网·c#
.NET修仙日记14 小时前
C#/.NET 微服务架构:从入门到精通的完整学习路线
微服务·c#·.net·.net core·分布式架构·技术进阶
歪歪1001 天前
在C#中详细介绍一下Visual Studio中如何使用数据可视化工具
开发语言·前端·c#·visual studio code·visual studio·1024程序员节
Eiceblue1 天前
如何通过 C# 高效读写 Excel 工作表
c#·visual studio·1024程序员节
张人玉1 天前
WPF 触发器详解:定义、种类与示例
c#·wpf·1024程序员节·布局控件