.NET 多线程
2024-07-11 14:29:03 4 举报
AI智能生成
多线程
作者其他创作
大纲/内容
异步<br>Asynchronou
常见任务
基本概念
什么是线程?
线程是操作系统中能够独立运行的最小单位,也<br>是程序中能够并发执行的一段指令序列
线程是进程的一部分,一个进程可以包含多个线<br>程,这些线程共享进程的资源
进程有入口线程,也可以创建更多的线程
为什么要多线程?<br>
批量重复任务希望同时进行(比如对于数组中的<br>每个元素都进行相同且耗时的操作)
多个不同任务希望同时进行,互不干扰(比如有<br>多个后台线程需要做轮询等操作)
什么是线程池?<br>
一组预先创建的线程,可以被重复使用来执行多<br>个任务
避免频繁地创建和销毁线程,从而减少了线程创<br>建和销毁的开销,提高了系统的性能和效率
异步编程默认使用线程池
什么是线程安全?<br>
线程安全
多个线程访问共享资源时,对共享资源的访问不<br>会导致数据不一致或不可预期的结果
同步机制
用于协调和控制多个线程之间执行顺序和互斥访<br>问共享资源
确保线程按照特定的顺序执行,避免竞态条件和<br>数据不一致的问题
原子操作
在执行过程中不会被中断的操作。不可分割,要<br>么完全执行,要么完全不执行,没有中间状态
在多线程环境下,原子操作能够保证数据的一致<br>性和可靠性,避免出现竞态条件和数据竞争的问<br>题
常用实现方式<br>
线程
线程池
异步编程
自带方法
Parallel
PLINQ
Thread 线程
线程的创建<br>
创建Thread实例,传入一个ThreadStart委托<br>
调用Thread.Start() 还可以传递参数<br>
线程的终止
Thread.Join 等待线程结束
Thread.Interrupt 中断执行的线程
只能中断是阻塞状态下的线程<br>
Thread.Abort
使用Abort方法强制终止线程可能导致一些严重的问题,包括资源泄露等不可预测的行为
较新版本的.NET 中如果使用这个方法,会报PlatformNotSupportedException
更推荐使用Thread.Abort 或者 CancellationToken<br>
线程的挂起与恢复
Thread.Suspend 以及 Thread.Resume
较新版本的.NET 中,这两个方法也被标记是Obsolete
推荐使用锁、信号量等方式实现
线程安全与同步机制<br>Thread-Safety
原子操作
InterLocked
同步机制(锁与信号量)
lock & Monitor
lock是Monitor的语法糖,使用lock编译器会自动包装代码
Mutex
Semaphore
WaitHandle
ManualReserEvent
AutoResetEvent
ReaderWriterLock
轻量型
SemaphoreSlim sem.Wait() sem.Release()<br>
ManualReserEventSlim
AutoResetEventSlim
ReaderWriterLockSlim<br>
0 条评论
下一页