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