面向云技术架构 - 痴者工良

  • 首页
  • 工良写的电子书
    • kubernetes 教程
    • 从 C# 入门 Kafka
    • 多线程和异步
    • 动态编程-反射、特性、AOP
    • 表达式树
  • 本站文章导航
  • 隐私政策
愿有人陪你颠沛流离
遇到能让你付出的事物或者人,都是一种运气。
能遇到,就该珍惜。或许你们最终没能在一起,但你会切实地感受到力量。
正因为这样,那段相遇才变得有价值,才没有辜负这世间的每一段相遇。

多线程与异步

此系列教程包括了多线程、锁、同步异步、线程池、任务、async/await、并行、并发等知识点,从零基础掌握多线程和异步,带你了解和走进同步和异步的世界。

  • 教程中每个小节都有代码示例
  • 深入原理,讲解深层知识
  • 由易到难,从入门到掌握
  • 循序渐进,一步步学习,一步步拓展知识面
  • 内容完整、齐全,可以系统式学习
  •  大量代码示例和场景实践
 本系列的教程,持续编写中,目前还没有完结。

C#多线程(1):Thread

讲解多线程的基础,主要围绕 Thread 类型展开,一步步讲述多线程中的知识点,从 C# 中的 Thread 讲述多线程使用方法。

目录

  • 1,获取当前线程信息
  • 2,管理线程状态
    • 2.1 启动与参数传递
      • 2.1.1 ParameterizedThreadStart
      • 2.1.2 使用静态变量或类成员变量
      • 2.1.3 委托与Lambda
    • 2.2 暂停与阻塞
    • 2.3 线程状态
    • 2.4 终止
    • 2.5 线程的不确定性
    • 2.6 线程优先级、前台线程和后台线程
    • 2.7 自旋和休眠

C#多线程(2):lock和Monitor

主要讲述 C# 中的线程锁,如何使用锁去避免线程冲突和解决死锁问题。多线程中的资源争用会导致数据出现问题,我们如何使用锁解决呢?

  • 1,Lock
    • lock 原型
    • lock 编写实例
  • 2,Monitor
    • 怎么用呢
    • 解释一下
    • 示例
    • 设置获取锁的时效

C#多线程(3):原子操作

原子操作是多线程中避免数据争用的解决方法之一,当操作不是原子性时,会发生什么?.NET 中自带了原子操作类型,那么我们该如何使用?我们可以使用锁实现原子操作嘛?

  • 知识点
    • 竞争条件
    • 线程同步
    • CPU时间片和上下文切换
    • 阻塞
    • 内核模式和用户模式
  • Interlocked类
    • 1,出现问题
    • 2,Interlocked.Increment()
    • 3,Interlocked.Exchange()
    • 4,Interlocked.CompareExchange()
    • 5,Interlocked.Add()
    • 6,Interlocked.Read()

C#多线程(4):进程同步Mutex类

讲解进程同步的 Mutex 类型,解决多进程中的同步问题。教会如何使用进程锁,如何保持进程同步等。

Mutex 类

  • 构造函数和方法
  • 系统只能运行一个程序的实例
  • 解释一下上面的示例
  • 接替运行
  • 进程同步示例
  • 另外

C#多线程(5):资源池限制

我们都知道有线程池,数据库连接池,那么你知道可以自己编写一个池嘛?我们可以使用资源池,限制多线程并发等情况下的工作进行情况。也解决了资源使用限制,避免同时执行的线程过多导致性能严重下降。

  • Semaphore 类
    • 示例
    • 示例说明
    • 信号量
  • SemaphoreSlim类
    • 示例
  • 区别

C#多线程(6):自动线程通知

两个线程间进行通讯,相互发送通知,在线程同步和多种工作中可以使用到,可以控制线程的执行流程和逻辑。

AutoRestEvent 类

  • 常用方法
  • 一个简单的示例
  • 解释一下
  • 复杂一点的示例
  • 解释

C#多线程(7):手动线程通知

更加灵活地控制线程的流程,调度任务的执行。

  • 区别和示例
  • ManualResetEvent 类
  • ManualResetEventSlim

C#多线程(8):线程完成数

多线程并发时,监控线程完成的任务数量和流程。在工作执行失败时,通过监控重新执行过程。

解决一个问题

  • CountdownEvent 类
  • 构造函数和方法
  • 示例

C#多线程(9):多阶段并行线程

控制多个并发的线程同步工作、协调,实现多个阶段的流程控制。

C#多线程(10):读写锁

解决并发线程读写数据问题,避免出现赃数据,保证数据的可靠性;解决并发字典容易出现的问题。

C#多线程(11):线程等待

关于线程阻塞,等待,CPU时间等的解释,了解等待对程序的性能影响,合理使用等待使得线程同步。

  • 前言
    • volatile 关键字
    • 三种常用等待
    • 再说自旋和阻塞
  • SpinWait 结构
    • 属性和方法
    • 自旋示例
    • 新的实现
  • SpinLock 结构
    • 属性和方法
    • 示例
    • 等待性能对比

C#多线程(12):线程池

使用线程池,可以避免线程创建消耗等性能损失,可以不理会线程的生命周期,专注于任务逻辑,提升性能。

线程池

  • ThreadPool 常用属性和方法
  • 线程池说明和示例
  • 线程池线程数
  • 线程池线程数说明
  • 不支持的线程池异步委托
  • 任务取消功能
  • 计时器

C#多线程(13):任务基础①

关于任务的基础。

  • 多线程编程
    • 多线程编程模式
    • 探究优点
  • 任务操作
    • 两者创建任务的方式
    • Task.Run() 创建任务
    • 取消任务和控制任务的创建
    • 任务返回结果以及异步获取返回结果
    • 捕获任务异常
    • 全局捕获任务异常

C#多线程(14):任务基础②

关于任务的基础。

  • 判断任务状态
  • 再说父子任务
  • 组合任务/延续任务
  • 复杂的延续任务
  • 并行(异步)处理任务
  • 并行(同步)处理任务
  • 并行任务的 Task.WhenAny
  • 并行任务状态
  • 循环中值变化问题
  • 定时任务 TaskScheduler 类

C#多线程(15):任务基础③

关于任务的基础。

  • TaskAwaiter
  • 延续的另一种方法
  • 另一种创建任务的方法
  • 实现一个支持同步和异步任务的类型
  • Task.FromCanceled()
  • 如何在内部取消任务
  • Yield 关键字
  • 补充知识点

C#多线程(16):手把手教你撸一个工作流

关于任务的实践。

    • 前言
    • 节点
      • Then
      • Parallel
      • Schedule
      • Delay
    • 试用一下
      • 顺序节点
      • 并行任务
    • 编写工作流
      • 接口构建器
      • 工作流构建器
      • 依赖注入
      • 实现工作流解析

C# 多线程(17):小总结

关于多线程学习的总结。

C# 多线程(18):一篇文章就理解async和await

一篇文章就让你理解 async 和 await。

  • 前言
    • async
    • await
  • 从以往知识推导
    • 创建异步任务
    • 创建异步任务并返回Task
    • 异步改同步
    • 说说 await Task
    • 说说 async Task<TResult>
    • 同步异步?
    • Task封装异步任务
    • 关于跳到 await 变异步
    • 为什么出现一层层的 await

系列文章持续更新中。

评论内容

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2022 whuanle.cn. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

粤ICP备18051778号

粤公网安备 44030902003257号