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

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

相关文章:

C#高级 01.Net多线程

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

Java---泛型讲解

文章目录 1. 泛型类2. 泛型方法3. 泛型接口4. 类型通配符5. 可变参数6. 可变参数的使用 1. 泛型类 1. 格式&#xff1a;修饰符 class 类名 <类型>{ }。例如&#xff1a;public class Generic <T>{ }。 2. 代码块举例&#xff1a; public class Generic <T>{…...

【论文阅读笔记】SegVol: Universal and Interactive Volumetric Medical Image Segmentation

Du Y, Bai F, Huang T, et al. SegVol: Universal and Interactive Volumetric Medical Image Segmentation[J]. arXiv preprint arXiv:2311.13385, 2023.[代码开源] 【论文概述】 本文思路借鉴于自然图像分割领域的SAM&#xff0c;介绍了一种名为SegVol的先进医学图像分割模型…...

Unix/Linux操作系统介绍

1、Unix/Linux操作系统介绍 1.1、操作系统的作用 1&#xff09;操作系统的目标 方便&#xff1a;使计算机系统易于使用有效&#xff1a;以更有效的方式使用计算机系统资源扩展&#xff1a;方便用户有效开发、测试、引进新功能 2&#xff09;操作系统的地位 操作系统在计算…...

什么是https证书?

HTTPS证书&#xff0c;也称为SSL&#xff08;Secure Sockets Layer&#xff09;证书或TLS&#xff08;Transport Layer Security&#xff09;证书&#xff0c;是一种数字证书&#xff0c;用于在网络上建立安全的加密连接。它的主要目的是确保在互联网上进行的数据传输的安全性和…...

C++ DAY2作业

1.课堂struct练习&#xff0c;用class&#xff1b; #include <iostream>using namespace std;class Stu { private:int age;char sex;int high; public:double score;void set_values(int a,char b,int c,double d);int get_age();char get_sex();int get_high(); }; vo…...

RabbitMQ核心概念记录

本文来记录下RabbitMQ核心概念 文章目录 什么叫消息队列为何用消息队列RabbitMQ简介RabbitMQ基本概念RabbitMQ 特点具体特点包括 Rabbitmq的工作过程RabbitMQ集群RabbitMQ 的集群节点包括Rabbit 模式大概分为以下三种单一模式普通模式镜像模式 本文小结 什么叫消息队列 消息&am…...

算法时间空间复杂度计算—空间复杂度

算法时间空间复杂度计算—空间复杂度 空间复杂度定义影响空间复杂度的因素算法在运行过程中临时占用的存储空间讲解 计算方法例子1、空间算法的常数阶2、空间算法的线性阶&#xff08;递归算法&#xff09;3、二分查找分析方法一&#xff08;迭代法&#xff09;方法二&#xff…...

计算机专业校招常见面试题目总结

博主面试岗位包括&#xff1a;java开发、软件测试、测试开发等岗位&#xff0c;基于之前经历的面试总结出的一些常见题目。仅供参考&#xff0c;互相学习&#xff01;&#xff01; 八股&#xff1a;java开发、测试、测开岗位 Java技术栈&#xff1a;Java基础、JVM、数据结构、…...

网络编程『简易TCP网络程序』

&#x1f52d;个人主页&#xff1a; 北 海 &#x1f6dc;所属专栏&#xff1a; Linux学习之旅、神奇的网络世界 &#x1f4bb;操作环境&#xff1a; CentOS 7.6 阿里云远程服务器 文章目录 &#x1f324;️前言&#x1f326;️正文TCP网络程序1.字符串回响1.1.核心功能1.2.程序…...

java itext5 生成PDF并填充数据导出

java itext5 生成PDF并填充数据导出 依赖**文本勾选框****页眉**&#xff0c;**页脚****图片**实际图 主要功能有文本勾选框&#xff0c;页眉&#xff0c;页脚&#xff0c;图片等功能。肯定没有专业软件画的好看&#xff0c;只是一点儿方法。仅供参考。 依赖 <!--pdf-->&…...

如何配置TLSv1.2版本的ssl

1、tomcat配置TLSv1.2版本的ssl 如下图所示&#xff0c;打开tomcat\conf\server.xml文件&#xff0c;进行如下配置&#xff1a; 注意&#xff1a;需要将申请的tomcat版本的ssl认证文件&#xff0c;如server.jks存放到tomcat\conf\ssl_file\目录下。 <Connector port"1…...

在CentOS 7上使用普通用户`minio`安装和配置MinIO

指定控制台端口号6901 以下是在CentOS 7上使用普通用户minio安装和配置MinIO的完整步骤&#xff0c;包括设置密码、设置开机自启动&#xff0c;以及使用minio用户启动和关闭服务的过程&#xff1a; 创建MinIO用户: sudo useradd -m minio sudo passwd minio这将创建一个可以登录…...

Vue3-27-路由-路径参数的简单使用

什么是路径参数 在路由配置中&#xff0c;可以将【参数】放在【路由路径】中&#xff0c; 从而实现&#xff0c;同一个 路由&#xff0c;同一个组件&#xff0c;因路径参数不同&#xff0c;可以渲染出不同的内容。特点 &#xff1a; 1、当携带不同路径参数的路由相互跳转时&am…...

w7数据库基础之mysql函数

系统函数 1.version() --mysql版本 2.user() --当前登录的数据库用户名system_user() 3.database() --当前使用的数据库名。schema() 4.datadir --数据库路径 5.version_compile_os 操作系统版本&#xff0c;like 后面可以使用%%进行模糊查询。 6.hostname 当前机器…...

智能优化算法应用:基于人工蜂鸟算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于人工蜂鸟算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于人工蜂鸟算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.人工蜂鸟算法4.实验参数设定5.算法结果6.…...

Docker的基础使用

Docker的基础使用 Docker 是一个开放平台&#xff0c;用于开发、运输和运行应用程序。Docker 允许你将应用程序与基础架构分离&#xff0c;从而可以像管理应用程序一样快速交付软件。以下是 Docker 的详细使用指南&#xff1a; 安装 Docker 下载 Docker : 根据你的操作系统…...

Sass(Scss)、Less的区别与选择 + 基本使用

在前端开发中&#xff0c;CSS预处理器成为了提高样式表开发效率的重要工具。Sass&#xff08;以及其语法Scss&#xff09;和Less是两个最为流行的CSS预处理器&#xff0c;它们在语法、功能和用法上存在一些差异&#xff0c;因此在选择使用时需要考虑多个因素。 1. Sass 和 Les…...

GPT Zero 是什么?

from https://openaigptguide.com/gptzero/ 在人工智能技术飞速发展的今天&#xff0c;人们对于文字内容的准确性和可信度要求越来越高。例如在学术研究领域&#xff0c;防止抄袭和造假是非常重要的。而对于普通用户而言&#xff0c;辨别哪些内容是由人工智能生成的&#xff0…...

c++学习笔记-提高篇-案例2-员工分组(vector/multimap)

一、案例描述 公司今天招聘10个员工&#xff08;ABCDEFGHIJ&#xff09;,10名员工进入公司后&#xff0c;需要指派员工在哪个部门工作员工信息&#xff1a;姓名 工资组成&#xff1b;部门分为&#xff1a;策划、美术、研发随机给10名员工分配部门和工作通过multimap进行信息插…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...