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

线程(一):基本概念

什么是线程?

  1. 线程是操作系统中能够独立运行的最小单位,也是程序能够并发执行的一段指令序列
  2. 它是进程的一部分,一个进程可以包含多个线程,这些线程共享进程资源
  3. 进程有入口线程,也可以创建更多的线程

为什么要用多线程?
1.批量重复任务希望同时执行
2.多个不同任务希望同时执行,互不干扰

什么是线程池

  1. 一组预先创建的线程,可以被重复用来执行多个任务
  2. 避免了重复创建和销毁,减少了开销,提升了性能和效率
  3. 异步编程默认使用线程池

什么是线程安全
线程安全:多个线程访问共享资源时,对共享资源的访问不会导致数据不一致或不可预期的结果
什么是同步机制
1.用于协调和控制多线程之间执行顺序和互斥访问共享资源
2.确保线程按照特定的顺序执行,避免竞争和数据不一致的问题
什么是原子操作
1.在执行过程中不会被中断的操作,不可分割,要么完全执行,要么完全不执行
2.在多线程环境下,原子操作能够保证数据的一致性和可靠性,避免出现竟态和数据竞争的问题
常用的实现方式
线程
线程池
异步编程
自带方法
1.Parallet:for forEach, Invoke
2.PLinq:AsParallet, AsSequential, AsOrdered

线程的创建:

  1. 创建Thread实例,并传入ThreadStart委托,还可以配置线程,是否为后台线程等[后台线程发现前台线程关闭,则也会关闭,前台线程则不会]
  2. 调用Thread.Start方法,还可以传参

线程的终止:

  1. 调用Thread.join方法,等待线程的结束
  2. 调用Thread.Interrupt方法,中断线程的执行
  3. 不能用Abort:推荐使用Thread.Interrupt或者CancellationToken

线程的挂起和恢复:

  1. Thread.Suspend及ThreadResume
  2. 新版本已标记为Obsolete
  3. 推荐使用锁,信号量等方式实现这一逻辑

线程安全和同步机制

  1. 原子操作:interlocked
  2. 锁和信号量: lock & Monitor
    Mutex
    Semaphore
    WaitHandle:ManualResetEvent,AutoResetEvent
    ReaderWriterLock

轻量型:
1.SemaphoreSlim
3. M:anualResetEventSlim
4. ReaderWriterLockSlim

不要自己造轮子

  1. 线程安全的单例:Lazy
  2. 线程安全的集合类型:ConcurrentBag, ConcurrentStack, ConcurrentQueue, ConcurrentDictionary 对于这些集合,直接放置,取时用try**获得值,是安全的.代替老旧的套路lock(object){}
  3. 阻塞集合: BlockingCollection
  4. 通道:Channel
  5. 原子操作:Interlocked
  6. 周期任务:PeriodicTimer
http://www.xdnf.cn/news/1158175.html

相关文章:

  • 让黑窗口变彩色:C++控制台颜色修改指南
  • week4
  • 内网后渗透攻击过程(实验环境)--3、横向攻击
  • MES系列 - MES是提升制造执行效率与透明度的关键系统
  • 【自动驾驶黑科技】基于Frenet坐标系的车道变换轨迹规划系统实现(附完整代码)
  • 多目标轨迹优化车道变换规划:自动驾驶轨迹规划新范式:基于Frenet坐标系的车道变换算法全解析
  • 枪战验证系统:通过战斗证明你是人类
  • 单片机启动流程和启动文件详解
  • [Linux]进程 / PID
  • [硬件电路-57]:根据电子元器件的受控程度,可以把电子元器件分为:不受控、半受控、完全受控三种大类
  • 非线性优化框架CasADi工具箱求解最优控制问题OCP
  • 什么是卡贴???
  • 零基础学习性能测试第一章:核心性能指标-并发量
  • 简洁高效的C++终端日志工具类
  • 2.组合式API知识点(1)
  • Dev-C++——winAPI贪吃蛇小游戏
  • Softhub软件下载站实战开发(十九):软件信息展示
  • 让不符合要求的任何电脑升级Windows11
  • 2025.7.20总结-实战演讲
  • 2025年03月20日中软(外包中控)
  • 30天打牢数模基础-卷积神经网络讲解
  • 《P3398 仓鼠找 sugar》
  • 基于深度学习的目标检测:从基础到实践
  • JavaScript 语言基础详解
  • 050_Set接口(HashSet / TreeSet / LinkedHashSet)
  • leetcode75【经典动态规划】之:最长公共子序列
  • imx6ull-系统移植篇11——U-Boot 移植(下)
  • 【Java源码阅读系列57】深度解读Java MethodHandle 类源码
  • 神经网络:池化层
  • jQuery多库共存