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

ASP.NET MVC Lock锁的测试

思路:我们让后台Thread.Sleep一段时间,来模拟一个耗时操作,而这个时间可以由前台提供。

我们开启两个或以上的页面,第一个耗时5秒(提交5000),第二个耗时1秒(提交1000)。

期望的测试结果:

不加Lock锁,第二个页面会先执行完,因为耗时短(1秒)。

加了Lock锁,第二个页面会一直等待,直到第一个页面执行完成后再进行。

后台:

    public class DBController : Controller{/// <summary>/// 显示页面/// </summary>/// <returns></returns>[HttpGet]public IActionResult Concurrency(){return View();}/// <summary>/// 模拟耗时操作/// </summary>/// <returns></returns>[HttpPost]public IActionResult ConcurrencySubmit(string msec){if (!string.IsNullOrEmpty(msec)){System.Threading.Thread.Sleep(int.Parse(msec));LogHelper.Info("submit:" + msec);}return View("Concurrency");}}

前台页面 Concurrency.cshtml:

@using(Html.BeginForm("ConcurrencySubmit", "DB", FormMethod.Post))
{
@Html.TextBox("msec",1000)
<button>提交</button>
}

然后开两个页面,第一个5秒,第二个1秒,同时提交。

发现第二个页面先执行完毕了,因为耗时最短。

接下来我们使用Lock来进行防并发处理,修改后台代码:

    public class DBController : Controller{private static object locker = new object();/// <summary>/// 显示页面/// </summary>/// <returns></returns>[HttpGet]public IActionResult Concurrency(){return View();}/// <summary>/// 模拟耗时操作/// </summary>/// <returns></returns>[HttpPost]public IActionResult ConcurrencySubmit(string msec){lock (locker){if (!string.IsNullOrEmpty(msec)){System.Threading.Thread.Sleep(int.Parse(msec));LogHelper.Info("submit:" + msec);}}return View("Concurrency");}}

同样的方法,再次提交。这次会发现第二个页面会等待,直到第一个页面执行完成后才执行

相关文章:

ASP.NET MVC Lock锁的测试

思路&#xff1a;我们让后台Thread.Sleep一段时间&#xff0c;来模拟一个耗时操作&#xff0c;而这个时间可以由前台提供。 我们开启两个或以上的页面&#xff0c;第一个耗时5秒(提交5000)&#xff0c;第二个耗时1秒(提交1000)。 期望的测试结果&#xff1a; 不加Lock锁&…...

Hadoop3:HDFS-通过配置黑白名单对集群进行扩缩容,并实现数据均衡(实用)

一、集群情况介绍 我的本地虚拟机&#xff0c;一共有三个节点&#xff0c;hadoop102、hadoop103、hadoop104 二、白名单 创建白名单文件whitelist&#xff0c;通过白名单的配置&#xff0c;只允许集群包含102和103两台机器可以存储数据&#xff0c;104无法存储数据。 需求 …...

TensorFlow系列:第五讲:移动端部署模型

项目地址&#xff1a;https://github.com/LionJackson/imageClassification Flutter项目地址&#xff1a;https://github.com/LionJackson/flutter_image 一. 模型转换 编写tflite模型工具类&#xff1a; import osimport PIL import tensorflow as tf import keras import …...

深度学习DeepLearning二元分类 学习笔记

文章目录 类别区分变量与概念逻辑回归Sigmoid函数公式决策边逻辑损失函数和代价函数逻辑回归的梯度下降泛化过拟合的解决方案正则化 类别区分 变量与概念 决策边置信度阈值threshold过拟合欠拟合正则化高偏差lambda&#xff08;λ&#xff09; 线性回归受个别极端值影响&…...

Eureka 介绍与使用

Eureka 是一个开源的服务发现框架&#xff0c;它主要用于在分布式系统中管理和发现服务实例。它由 Netflix 开发并开源&#xff0c;是 Netflix OSS 中的一部分。 使用 Eureka 可以方便地将新的服务实例注册到 Eureka 服务器&#xff0c;并且让其他服务通过 Eureka 服务器来发现…...

Java异常体系、UncaughtExceptionHandler、Spring MVC统一异常处理、Spring Boot统一异常处理

概述 所有异常都是继承自java.lang.Throwable类&#xff0c;Throwable有两个直接子类&#xff0c;Error和Exception。 Error用来表示程序底层或硬件有关的错误&#xff0c;这种错误和程序本身无关&#xff0c;如常见的NoClassDefFoundError。这种异常和程序本身无关&#xff0…...

bash终端快捷键

快捷键作用ShiftCtrlC复制ShiftCtrlV粘贴CtrlAltT新建终端ShiftPgUp/PgDn终端上下翻页滚动CtrlC终止命令CtrlD关闭终端CtrlA光标移动到最开始为止CtrlE光标移动到最末尾CtrlK删除此处到末尾的所有内容CtrlU删除此处至开始的所有内容CtrlD删除当前字符CtrlH删除当前字符的前一个…...

【Visual Studio】Visual Studio报错合集及解决办法

目录 Visual Studio报错:error LNK2001 Visual Studio报错:error C2061 Visual Studio报错:error C1075 Visual Studio报错:error C4430 Visual Studio报错error C3867 概述 持续更细Visual Studio报错及解决方法 Visual Studio报错:error LNK2001 问题 : error LNK2001…...

【微信小程序知识点】转发功能的实现

转发功能&#xff0c;主要帮助用户更流畅地与好友分享内容与服务。 想实现转发功能&#xff0c;有两种方式&#xff1a; 1.页面js文件必须声明onShareAppMessage事件监听函数&#xff0c;并自定义转发内容。只有定义了此事件处理函数&#xff0c;右上角菜单才会显示“转发”按…...

用python识别二维码(python实例二十三)

目录 1.认识Python 2.环境与工具 2.1 python环境 2.2 Visual Studio Code编译 3.识别二维码 3.1 代码构思 3.2 代码实例 3.3 运行结果 4.总结 1.认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读性&…...

电脑文件夹怎么设置密码?让你的文件更安全!

在日常使用电脑的过程中&#xff0c;我们常常会有一些需要保护的个人文件或资料。为了防止这些文件被他人未经授权访问&#xff0c;对重要文件夹设置密码是一种有效的保护措施&#xff0c;可是电脑文件夹怎么设置密码呢&#xff1f;本文将介绍2种简单有效的方法帮助您为电脑文件…...

paddla模型转gguf

在使用ollama配置本地模型时&#xff0c;只支持gguf格式的模型&#xff0c;所以我们首先需要把自己的模型转化为bin格式&#xff0c;本文为paddle&#xff0c;onnx&#xff0c;pytorch格式的模型提供说明&#xff0c;safetensors格式比较简单请参考官方文档&#xff0c;或其它教…...

Memcached vs Redis——Java项目缓存选择

在Java项目开发中&#xff0c;缓存系统作为提升性能、优化资源利用的关键技术之一&#xff0c;扮演着至关重要的角色。Memcached和Redis作为两种流行的缓存解决方案&#xff0c;各有其独特的优势和应用场景。本文旨在通过分析项目大小、用户访问量、业务复杂度以及服务器部署情…...

大模型最新黑书:基于GPT-3、ChatGPT、GPT-4等Transformer架构的自然语言处理 PDF

今天给大家推荐一本丹尼斯罗斯曼(Denis Rothman)编写的关于大语言模型&#xff08;LLM&#xff09;权威教程<<大模型应用解决方案> 基于GPT-3、ChatGPT、GPT-4等Transformer架构的自然语言处理>&#xff01;Google工程总监Antonio Gulli作序&#xff0c;这含金量不…...

【电子数据取证】电子数据司法鉴定

文章关键词&#xff1a;电子数据取证、司法鉴定服务、司法鉴定流程 一、定义 什么是司法鉴定&#xff1f; 在诉讼活动中鉴定人运用科学技术或者专业知识对诉讼涉及的专门性问题进行鉴别和判断并提供鉴定意见的活动。 电子数据司法鉴定 那么电子数据司法鉴定&#xff0c;就…...

使用 OpenCV 的 inRange 函数进行颜色分割

使用 OpenCV 的 inRange 函数进行颜色分割 在图像处理领域&#xff0c;颜色分割是一个常见的任务&#xff0c;常用于识别和提取图像中的特定颜色区域。OpenCV 提供了一个非常方便的函数 inRange 来实现这一功能。在这篇博客中&#xff0c;我们将详细介绍 inRange 函数的用法&a…...

OpenAI终止对中国提供API服务,对国内AI市场产生重大冲击?

6月25日&#xff0c;OpenAI突然宣布终止向包括中国在内的国家地区提供API服务&#xff0c;本月9日这一政策已经正式生效了&#xff01; 有人说&#xff0c;这个事件给中国AI行业带来很大冲击&#xff01;是这样吗&#xff1f;在展开讨论前&#xff0c;我们先来看看什么是API服务…...

JavaDS —— 栈 Stack 和 队列 Queue

栈的概念 栈是一种先进后出的线性表&#xff0c;只允许在固定的一端进行插入和删除操作。 进行插入和删除操作的一端被称为栈顶&#xff0c;另一端被称为栈底 栈的插入操作叫做进栈/压栈/入栈 栈的删除操作叫做出栈 现实生活中栈的例子&#xff1a; 栈的模拟实现 下面是Jav…...

C++进阶:继承和多态

文章目录 ❤️继承&#x1fa77;继承与友元&#x1f9e1;继承和静态成员&#x1f49b;菱形继承及菱形虚拟继承&#x1f49a;继承和组合 ❤️多态&#x1fa77;什么是多态&#xff1f;&#x1f9e1;多态的定义以及实现&#x1f49b;虚函数&#x1f49a;虚函数的重写&#x1f499…...

【八大排序】java版(上)(冒泡、快排、堆排、选择排序)

文章目录 一、冒泡排序(重点)思路代码 二、快排(面试重点)思路代码 三、堆排序(面试重点)思路代码 四、选择排序思路代码 一、冒泡排序(重点) 思路 前后两两数据进行比较&#xff0c;小的数据往前走&#xff0c;大的数据往后走&#xff0c;每一轮结束之后&#xff0c;最大的数…...

【DexGraspNet与多指手抓取算法详解】第三章 DexGraspNet数据集构建机理

目录 第三章 DexGraspNet数据集构建机理 第一部分 原理详解 3.1 数据生成流程总览 3.1.1 Asset准备与处理 3.1.1.1 ShapeNetSem物体库筛选 3.1.1.1.1 几何网格清理与流形检测 3.1.1.1.2 物理属性赋值(质量、质心) 3.1.1.2 视觉资产渲染管线 3.1.1.2.1 材质与纹理映射…...

megaAVR_PWM硬件PWM库:工业级实时PWM控制详解

1. megaAVR_PWM 库深度技术解析&#xff1a;面向工业级实时控制的硬件PWM实现1.1 工程背景与核心价值定位在嵌入式系统开发中&#xff0c;PWM&#xff08;脉宽调制&#xff09;是电机驱动、LED调光、电源管理及伺服控制等场景的基础技术。然而&#xff0c;大量开发者仍依赖anal…...

如何构建Min浏览器插件:从零开始的可扩展架构指南

如何构建Min浏览器插件&#xff1a;从零开始的可扩展架构指南 【免费下载链接】min A fast, minimal browser that protects your privacy 项目地址: https://gitcode.com/gh_mirrors/mi/min Min浏览器作为一款注重隐私保护的轻量级浏览器&#xff0c;其插件系统为开发者…...

导师推荐!盘点2026年好评如潮的AI论文平台

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文平台正在席卷学术圈&#xff0c;覆盖选题构思、文献综述、内容生成、降重润色与格式排版全流程&#xff0c;真正帮你高效搞定论文写作。 一、全流程王者&#xff1a;一站式搞定论文全链路&…...

Eclipse Paho Android连接管理:自动重连与离线消息缓冲的完整实现指南

Eclipse Paho Android连接管理&#xff1a;自动重连与离线消息缓冲的完整实现指南 【免费下载链接】paho.mqtt.android Eclipse Paho是一个开源的物联网消息代理库。它支持多种协议&#xff0c;包括MQTT、AMQP和HTTP&#xff0c;并提供各种语言的客户端库。Paho适用于需要在物联…...

DDR3自刷新机制在低功耗系统中的优化实践

1. DDR3自刷新机制的核心原理 DDR3内存的自刷新机制是低功耗设计中的关键环节。简单来说&#xff0c;它就像给手机设置飞行模式——系统暂时不需要频繁访问内存时&#xff0c;DRAM芯片会自己管理数据刷新工作&#xff0c;而不是依赖外部控制器持续发号施令。我在设计智能手表项…...

别再让用户长按了!用html2canvas在微信H5里优雅生成分享海报(Vue3/TS实战)

微信H5海报生成实战&#xff1a;用html2canvas打造零摩擦分享体验 每次看到用户笨拙地长按屏幕、小心翼翼地调整手指位置就为了保存一张活动海报&#xff0c;作为开发者的你是否感到一丝愧疚&#xff1f;在移动端体验至上的今天&#xff0c;这种原始操作显然与"优雅"…...

破局MIDI控制困境:SendMIDI让命令行成为音乐创作的神经中枢

破局MIDI控制困境&#xff1a;SendMIDI让命令行成为音乐创作的神经中枢 【免费下载链接】SendMIDI Multi-platform command-line tool to send out MIDI messages 项目地址: https://gitcode.com/gh_mirrors/se/SendMIDI 在数字音乐制作的世界里&#xff0c;MIDI&#x…...

交叉调整率差的5大根源—变压器、绕组、反馈、拓扑、元件

Q1&#xff1a;导致交叉调整率差的第一大根源是什么&#xff1f;变压器漏感与绕组耦合不良。漏感使能量不能完全传递到辅路&#xff0c;各绕组漏感不一致&#xff0c;负载变化时电压漂移更明显。耦合系数越接近 1&#xff0c;交叉调整率越好。Q2&#xff1a;绕组绕制方式对交叉…...

突破国际漫游限制:Nrfr免Root工具的终极解决方案

突破国际漫游限制&#xff1a;Nrfr免Root工具的终极解决方案 【免费下载链接】Nrfr &#x1f30d; 免 Root 的 SIM 卡国家码修改工具 | 解决国际漫游时的兼容性问题&#xff0c;帮助使用海外 SIM 卡获得更好的本地化体验&#xff0c;解锁运营商限制&#xff0c;突破区域限制 …...