一个并发或者称为锁的问题

高并发情况下,MYSQL的锁等待问题分析和解决方案 问题描述 在进行高并发性能调优的时候发现了如下的一个问题: 1. 在一个事务中同时包括了SELECT,UPDATE和INSERT语句 2. SELECT和UPDATE涉及到的数据为同一张表中的同一套记录 3. 在并发为10的情况下就会触发数据库锁等待和死锁的情况 问题分析 在问题分析之前引入几个概念 共享锁 SELECT 语句时对查询行加的锁类型为共享锁。 共享锁的特性为: 不... 阅读详情

我们很多人都用过标准io 的write 和read 函数,我们先看看write 函数的原形:
ssize_t write(int fildes, const void *buf, size_t nbyte)
这 里的buf 为何是const? 有没有const 看似问题不大,但是对于并发来说确实是一个大问题,我们都知道,write 最终进入系统调用进而进入 sys_write ,进入sys_write 之后一直到copy_from_user 一直都没有操作buf ,那么想象一种情况,如果这期间buf 被改了怎 么办,程序的本意是写入改之前的buf ,就是因为程序太信任库函数了才把buf 交给write 函数,但是buf 却被改了,这样的话,写入文件的是修改前的 buf 还是修改后的buf ,按照常理来说,当然是修改前的buf 了,但是谁能保证这一点呢?又是把保证这一点的工作交给谁呢?交给内核吗?内核忙着呢,根 本无暇管这些破事,那么交给用户吗?用户程序员能保证个个都是高手吗?不能!那么只有交给库函数,可是函数本身如果进行buf 加锁动作的话就未免太耗时 了,难道为了避免少数人的无知就付出这么大的代价吗?当然不,那么怎么办呢?交给编译期是个不错的选择,这就产生了write 参数的const 。
    
这个问题到底是个机制问题还是个策略问题?如果是机制当然要交给内核,既然没有交给内核可见它不是什么机制,那么它就是一种策略了,实际上,保护buf 是 用户行为也就是程序员工作的一部分,为了减轻程序员的负担才有了const 一说,这只能说库的设计者想的比较周到。
    
现在我们想想这个问题,在没有多线程的环境里,const 简直没有必要,即使有了多线程但是没有开启内核抢占的情况下,const 似乎也没有多大意义,没 有内核抢占的情况下,只要进行系统调用进入内核,一切就安全了,除了中断这个杀手外谁也奈何我不得,但是现在的世界既有多线程又有内核抢占,甚至多核,多 处理器已经成为趋势,并发的问题就凸现了出了。
    
还是我们多加些班来减轻库设计者的负担吧,他们够累了,给他们一些时间陪陪他们的妻子或丈夫吧,我们有薪水可拿,他们仅仅期待我们的认可,期待有一日我会得到如下的write 接口:
write(char *buf).

//

回复: 一个并发或者称为锁的问题 dog250

    是啊,腺嘌呤,鸟嘌呤,胞嘧啶,胸腺嘧啶就这四样东西创造了整个人类世界,我们原来公司就有个哥们儿,自称自己精通EJB ,Spring ,还有什么持久层之类的,精通eclipse ,可是却不会用命令行编译hello world ,真事儿!真为我们的IT 产业担心

回复: 一个并发或者称为锁的问题 guosha

    我也觉得很多人动不动谈什么架构设计模式很无趣,OS 的常用的posix 接口就那么一百多个,却不妨碍人们在上面开发出无数个程序。

回复: 一个并发或者称为锁的问题 dog250

    说的很对啊,接口的设计者一般都是高手,他们自己当然知道什么情况下会发生什么事,但是应用接口的人就是鱼龙混杂了,接口设计的好坏的评定标准之一就是“ 更容易被正确使用,更不容易被误用”,单进单出的接口当然最不容易引起混乱,“只做并且做好一件事”看来也是评定标准之一啊,这么看来设计接口的人要比应用接口的人考虑的事情要多得多,从这些原则上我更喜欢posix 而不喜欢win32 API

回复: 一个并发或者称为锁的问题 guosha

    策略问题吧,最小权限原则,我们自己写接口时也该这么限定的。

回复: 一个并发或者称为锁的问题 dog250

    呵呵,我本身喜欢思考,又喜欢写些东西,就是手笨嘴笨脑子也不快,也只能乱吟一番,平时比较喜欢李白,鲁迅还有屈原他们,好像还有酒,呵呵

    另外,想跟你交流的话,我以后就把所有文章都放到思想者和杂感里面啦,哈哈,和你交流总能让我再深入一些的考虑问题,感觉很不错

 

mongodb并发和锁的问题总结 MongoDB 允许多个客户端读写相同的数据。为了确保一致性,MongoDB 使用锁定和并发控制来防止客户端同时修改相同的数据。对单个文档的写入要么完整发生,要么根本不发生,并且客户端始终看到一致的数据。 阅读详情

相关推荐

SDIO协议

SDIO协议1 概述  SDIO,全称:Secure Digital Input and Output ,即安全数字输入输出接口。2 特点①与多媒体卡系统规格书版本4.2全兼容。支持三种不同的数据总线模式:1位(默认)、4位和8位。②与较早的多媒体卡系统规格版本全兼容(向前兼容)。③与SD存储卡规格版本2.0全兼容。④与SD I/O卡规格版本2.0全兼容:支持两种不同的数据总线模式:1位(默认)和4

Let the development board fly! 3万+

什么是并发(非常详细)

按最简单、最基本的程度理解,并发(concurrency)是两个或多个同时独立进行的活动。并发现象遍布日常生活,我们可以边走路边说话,左右手同时做出不一样的动作,诸如此类。

weixin_64051447的博客 5737

详解电路设计中的RC电路

​ 一、什么是RC电路 RC电路是指由电阻R和电容C组成的电路,它是脉冲产生和整形电路中常用到 的电路。 常见的RC充、放电电路、RC积分电路合RC微分电路接下来详细讲解。 二、RC充、放电电路 RC充、放电电路如下图所示,下面通过充电和放电两个过程来分析此电路。 ​RC充、放电电路图 (1)RC充电电路 RC充电电路图如下图(a)所示 RC充电电路图及充电曲线图 ​由上图分析: 将上图a中开关S置于“1”处,电源E开始通过电阻R对电容C充电,由于刚开始充电时电容两端没有..

IT xiaobai 4万+

实现一个简单的并发效果

很多公司都要高并发经验 并发在很多公司都会用到,特别是电商公司,尤其是双十一秒杀系统 下面我来带大家写一个简单的并发demo,不说了直接上代码 package com.nice; import java.util.concurrent.*; public class ExecutorTest { public static boolean flag = true; /...

smile_foreach的博客 325

[Spawn service failed. Exiting] ROS2运行turtlebot3_gazebo例程卡住_报错

[Spawn service failed. Exiting] ROS2运行turtlebot3_gazebo例程卡住_报错

Feizhai2的博客 4862

Python实现支付宝转账接口

由于工作需要使用python开发一个自动转账接口,记录一下开发过程。 首先需要在蚂蚁金服上申请开通开发者账户,有了开发者账户就可以使用沙箱进行开发了。 在开发之前我们需要在沙箱应用中填写密钥,密钥的获取可以使用阿里提供的工具包自动生成。 前期准备工作完成了,接下来是编写代码部分。主要用到了python-alipay-sdk库,使用pip安装即可,如果安装的过程中遇到问题推荐使用Anaconda...

FanMLei的博客 8516

详解并发和并行意义

很多人不是特别明白并发编程和并行编程的区别所在,有很多人很容易搞混淆,觉得二者近似相等,本文将用几个浅显易懂的例子,来说明一下什么是并发和并行。 1、任务与多任务        关于什么是进程,什么是线程,这里不打算多说,关于每一种开发语言的多线程处理技术语法上有所区别,原理很多类似,可以查阅相关的参考书。什么是任务呢?其实很简单,在我们生活中,比如我今天要学一首歌,要在操场上散步1000米,

MIss-Y的博客 3万+

深入解析BlueZ5与D-Bus:Linux蓝牙开发实战指南

本文深入解析BlueZ5与D-Bus在Linux蓝牙开发中的核心应用,提供从环境搭建到实战开发的完整指南。通过详细代码示例和调试技巧,帮助开发者掌握蓝牙协议栈与D-Bus接口的交互方法,实现高效蓝牙设备管理与GATT服务开发。

weixin_28292761的博客 450

并发

每秒处理请求数和并发是一个概念吗? 不是同一个概念,但它们之间有联系:  设平均响应时间为t(单位为毫秒), 并发量为c,每秒处理请求数为q,则:  q = (1000/t) * c   提高web服务器并发处理能力    对于一台服务器,我们希望:它在单位时间内能够处理的连接数越多越好,吞吐量越大越好。要提高web服务器吞吐量,其实要考虑这么几个因素:    1并发连接数

我相信 1126

YOLOv11魔改高效涨点 | 注意力篇 | SimAM注意力:基于神经科学的 3D 注意力机制,三维权重的暴力美学,无参数也能暴力涨点?代码极简,彻底疯狂!!!

在本文中,我们为卷积神经网络(ConvNets)提出了一个概念简单但非常有效的注意力模块。与现有的通道注意力(Channel-wise)和空间注意力(Spatial-wise)模块不同,我们的模块在不向原始网络添加参数的情况下,推断出层中特征图的 3D 注意力权重。具体来说,我们基于一些知名的神经科学理论,提出优化一个能量函数来寻找每个神经元的重要性。我们进一步推导出了该能量函数的快速闭式解,并表明该解可以用不到十行代码实现。

猫天意的博客 248

深度学习图神经网络 (GNN) —— 处理图结构数据(六十九)

本文系统介绍了图神经网络(GNN)的核心概念、主流模型及其应用。主要内容包括: GNN基础:阐述了图结构数据的特性(节点数不定、连接不规则),以及GNN相比CNN/RNN的优势在于处理非欧式空间的图数据。 核心机制:重点讲解了消息传递框架(MPNN),通过聚合邻居信息迭代更新节点表示,并分析了GCN的归一化邻接矩阵计算和GAT的注意力权重机制。 典型模型: GCN:基于归一化邻接矩阵的特征传播 GAT:引入注意力机制区分邻居重要性 GraphSAGE:通过采样解决大图扩展性问题 GIN:理论表达能力最强的图

hello.reader 300

一个并发程序开多少线程合适?

多线程,性能,CPU

6036

【局部规划模块轨迹优化算法】EM_planner最大期望滚动优化算法

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对EM_planner最大期望滚动优化算法做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容。

qq_35635374的博客 760

企业软件批量安装实战:静默参数、内网分发与避坑指南

批量软件部署是现代企业终端管理的基础能力,其核心在于通过静默安装参数、分发通道和验证闭环实现状态统一与版本可控。静默安装绕过交互界面,依赖MSI、NSIS等安装包的特定参数;分发通道则需根据有无域环境选择组策略、PsExec或专业工具;最终需通过退出码、文件和服务状态验证安装结果。该技术尤其适用于内网离线场景,如用Python脚本批量安装whl包或企业软件,解决依赖顺序和架构不一致等问题。掌握批量安装不仅能降低手工运维成本,还能支持资产审计与故障回溯,让IT从重复劳动中解放,专注更复杂的问题。本文从批量部署

weixin_34199405的博客 185

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

【并发专题】并发编程核心问题以及锁的底层实现

并发编程核心知识整理,并发与并行、并发编程核心问题以及解决方法、volatile关键字、如何保证多线程的原子性、CAS概念以及存在的问题、锁的分类和状态、synchronized和Reentrantlock的底层实现,面试看这一篇就够了,让你在面试中吊打面试官!

小谷同学的博客 1541

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【crossbeam系列】1有锁并发、无锁并发和crossbeam极简介

随着计算机硬件和软件的发展,个人计算机里动辄几千几万线程已经成为家常便饭。而在程序中大量使用并发也成为了一个主流,因为这样的程序有更小的延迟,并且对多核CPU也有更充分的利用。有锁并发对...

Rust语言学习交流 2641

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

redis锁处理并发问题

redis锁处理并发问题 redis锁处理高并发问题十分常见,使用的时候常见有几种错误,和对应的解决办法,在此进行自己的总结和整理。 set方式 setnx方式 setnx+getset方式 set方式 作为redis小白,一开始能想到的使用redis加锁的方式就是set。 加锁:redis中set一个值,set(lock,1); 并发处理:其他线程必须拿到这个值,才可以往下进行,否...

u010412301的博客 1757

并发的核心问题与锁实现

在多线程环境中,JMM(缓存)导致的不可见性问题,编译优化带来了乱序性问题,线程切换带来了非原子性问题.其实缓存、线程、编译优化的目的和我们写并发程序的目的是相同 的,都是提高程序安全性和性能。但是技术在解决一个问题的同时,必然会带来 另外一个问题,所以在采用一项技术的同时,一定要清楚它带来的问题是什么, 以及如何规避。CAS叫做Compare-And-Swap,比较并交换,该算法是硬件对于并发操作的支持,主要是通过处理器的指令来保证操作的原子性。

Dreamkidya的博客 688

mysql 高并发写入锁表_使用mysql中的锁解决高并发问题

阿里云产品通用代金券,最高可领1888分享一波阿里云红包. 阿里云的购买入口为什么要加锁多核计算机的出现,计算机实现真正并行计算,可以在同一时刻,执行多个任务。在多线程编程中,因为线程执行顺序不可控导致的数据错误。比如,多线程的理想状态是这样的多线程理想.jpg但是实际情况是这样的:多线程实际.jpg在网络编程中,在同一时刻,多个客户端同时请求同一个资源,如果不做控制,也会带来数据错误。比如在同...

weixin_28917337的博客 3595

深入理解 Java 并发锁

一、并发锁简介 确保线程安全最常见的做法是利用锁机制(Lock、sychronized)来对共享数据做互斥同步,这样在同一个时刻,只有一个线程可以执行某个方法或者某个代码块,那么操作必然是原子性的,线程安全的。 在工作、面试中,经常会听到各种五花八门的锁,听的人云里雾里。锁的概念术语很多,它们是针对不同的问题所提出的,通过简单的梳理,也不难理解。 可重入锁 可重入锁又名递归锁,是指同一个线程在外层方法获取了锁,在进入内层方法会自动获取锁。 可重入锁可以在一定程度上避免死锁。 Reentrant.

m0_50414588的博客 4842

JAVA高并发——锁的优化

减少锁的持有时间、减小锁粒度、用读写锁来替代独占锁、锁分离、锁粗化

码说芯语的博客 1183

怎么解决并发量问题,无锁or有锁

在高并发场景下,选择无锁或有锁方案需结合业务特性、数据冲突频率和性能需求综合判断。

2402_83164836的博客 1020

深入并发锁,解析Synchronized锁升级

这篇文章分为六个部分,不同特性的锁分类,并发锁的不同设计,Synchronized中的锁升级,ReentrantLock和ReadWriteLock的应用,帮助你梳理 Java 并发锁及相关的操作。 一、锁有哪些分类 一般我们提到的锁有以下这些: 乐观锁/悲观锁 公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁/读写锁 分段锁 偏向锁/轻量级锁/重量级锁 自旋锁 上面是很多锁的名词,这些...

互联网架构师笔记 1817

一个合格的Java选手必须要掌握的并发锁知识

Java内置锁:基于Java语法层面(关键词)实现的锁,主要是根据Java语义来实现,最典型的应用就是synchronized。Java显式锁:基于JDK层面实现的锁,主要是根据基于Lock接口和ReadWriteLock接口,以及统一的AQS基础同步器等来实现,最典型的有ReentrantLock。使用方式:synchronized关键字互斥锁主要有作用于对象方法上面,作用于类静态方法上面,作用于对象方法里面,作用于类静态方法里面等4种方式。

qq_43842093的博客 1184
上一篇: 浅谈设计--涡轮增压和Intel的HT
下一篇: exec的不同实现--鸠占鹊巢还是功成身退
linuxcode_turing
博客等级 码龄17年 0粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值