高并发编程

news2024/11/5 22:55:59

一台64G内存的服务器QPS可以达到9W,TPS(事务)可以达到5K,每个TPS大约包含18个QPS.只读的话QPS可以达到30~40万.阿里云有相关测试工具、测试方法、测试结果。

1、volatile 保证可见性,禁止指令重排,避免多线程环境下乱序执行

        (1)及时通知

(2)变量前后加内存屏障,前加读屏障,后加写屏障

2、automicInteger 原子性:

原理:调用unsafe类,使用底层原语直接操作内存地址+1

3、有序性:编译器指令重排

指令并行的重排

如何禁止指令重排:在关键变量前加volatile或sycnizied

************************锁****************

1、重量级锁:又叫悲观锁。java的jvm中启动一个线程,一定在操作系统中启动一个线程,所以叫重量级锁。

        叫重量级是因为要结果系统处理。

        go语言中几百几千个协程才会在系统中创建一个线程。

        在队列中等待系统调用,此时不占用系统资源。

2、轻量级锁:又叫自旋锁/乐观锁/CAS。一般用while循环实现,此时占用系统资源。

        叫轻量级是因为不需要经过系统调度处理,在程序中自行解决。

        cas如下图:compareAndSwap

         cas会存在A->B->A问题,解决方法,加版本号。

        cas另外一个问题:比较后修改前,工作被其它线程打断并修改了……--->调用c++的unsafe方法:unsafe_compareAndSwap-->Atomic::cmpxchg汇编语言(LOCK_IF_MP:如果是多核就上锁)

**所以执行时间较长的,用户数较多的不适合轻量级锁,因为会导致cpu不停的切换。

***************内存屏障

inter cpu:lfence,sfence,mfence

jvm虚拟机:
        loadLoadBarrier:读语句和读语句之间的屏障

        LoadStoreBarrier:读语句和写语句之间的屏障

        StoreLoadBarrier:写语句和读语句之间的屏障

        StoreStoreBarrier:写语句和写语句之间的屏障

*****************IOC 控制反转

***************************Bean的生命周期

 *************************spring中用了哪些設計模式

**************************循環依賴****************************

 

 

 ************************AOP实现原理****************************

 ******************************spring 事务回滚**************************

****************************jvm****************************

服务器调优:
阿里巴巴开源调优工具:Arthas
通过内核查看内存信息:sudo cat /proc/meminfo | grep -i slab
设置打开文件数限制到100万:ulimit -n 1024000
查看可以端口范围(默认是32768~ 60999):$ sysctl -a | grep net.ipv4.ip_local_port_range
设置可用端口范围:
sudo sysctl -w net.ipv4.ip_local_port_range="1026 61999"
**********并发连接时间会越来越长的问题解决******************
linux优先给 bind(o)分配奇数端口,如果奇数端口号分配完了,才去尝试分配偶数端口
linux优先给connect 分配偶数端口。如果偶数端口号分配完了,才去尝试分配奇数端口
所以每次要遍历端口,花的时间就越来越长。解决的办法就是手动指定绑定端口和连接端口一致。

客户端机器测试并发时,可以虚拟ip:ifconfig enp0s31f6:$i ${IPS[$i]} netmask $NETMASK up


Redis:setNx解决重复下单等幂等性问题,记得加过期时间,如3秒
Bitmap可以解决是否签到等场景中数据存储问题
Redis中Sintersiore可以把两个set中的交集放在新的set中
Neo4j可以用来存储社交好友的问题
visualVM查看java内存
idea中jclasslib工具可查看jvm指令码

改为原子性,来保证线程安全,比synchronized效率更高


原子性的具体使用方法:


*************************************锁**************************************
悲观锁:synchronized、lock
乐观锁:并发的概率不高的情况下使用,读多写少。

占用cpu时间比较久的时候,可以用互斥锁(synchronized);反之用自旋锁(即cas)

2、ReentrantLock:
2.1显式锁

2.2ReentrantLock尝试锁tryLock

2.3ReentrantLock可以中断

******************************************************
Mysql中,尽量先用explain分析一下sqk语句


**********************************************


Redis监控:普罗米修斯

*********************************************Spring*******************************************

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2231017.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

论文 | PROMPTAGATOR : FEW-SHOT DENSE RETRIEVAL FROM 8 EXAMPLES

1. 背景信息 在信息检索领域,传统的方法往往依赖于大量的标注数据来训练模型,以便在各种任务中表现良好。然而,许多实际应用中的监督数据是有限的,尤其是在不同的检索任务中。最近的研究开始关注如何从一个拥有丰富监督数据的任务…

群控系统服务端开发模式-应用开发-上传工厂开发

现在的文件、图片等上传基本都在使用oss存储。而现在常用的oss存储有阿里云、腾讯云、七牛云、华为云等,但是用的最多的还是前三种。而我主要封装的是本地存储、阿里云存储、腾讯云存储、七牛云存储。废话不多说,直接上传设计图及说明,就一目…

STM32之串口字库更新

1.串口通讯介绍 串口通讯(Serial Communications)是一种通过串口进行数据传输的通讯方式,通过串行口每次传输一个字节的数据,按照约定的协议进行数据的传输和接收。串口通讯的原理是利用串行口的发送和接收线路,将需要…

立刻解决 gcc: error: unrecognized argument in option ‘-mabi=aapcs-linux’

unrecognized argument in option ‘-mabiaapcs-linux’ Linux 主线支持的硬件较少,一般是第三方开源( Linaro/Yocto )或者硬件厂商提供定制的嵌入式 Linux 如果确认主线支持自己的硬件,可以从 https://www.kernel.org/ 获取指定…

法律智能助手:开源NLP系统助力法律文件高效审查与检索

一、系统概述 思通数科AI平台是一款融合了自然语言处理和多标签分类技术的开源智能文档分类工具,特别适用于法律行业。平台采用深度学习的BERT模型来进行特征提取与关系抽取,实现了精准的文档分类和检索。用户可以在线训练和标注数据,使系统…

ChatGPT新体验:AI搜索功能与订阅支付指南

就在凌晨,在ChatGPT迎来两周岁生日之际,OpenAI重磅发布了ChatGPT的全新人工智能搜索体验。 期待已久的时刻终于到来, ChatGPT正式转型成为一款革命性的AI搜索引擎! 先来看看ChatGPT搜索:这次不是简单的加个搜索框,而…

【零售和消费品&家居用品】家庭门窗开闭状态安全监控系统源码&数据集全套:改进yolo11-DCNV2

改进yolo11-GhostDynamicConv等200全套创新点大全:家庭门窗开闭状态安全监控系统源码&数据集全套 1.图片效果展示 项目来源 人工智能促进会 2024.11.01 注意:由于项目一直在更新迭代,上面“1.图片效果展示”和“2.视频效果展示”…

合并区间 leetcode56

合并区间leetcode 目录一、题目二、踩坑过程三、上官方解答四、含泪体会彩蛋 目录 一、题目 二、踩坑过程 一开始想使用一个数组来标记区间,但是仔细想不好实现,单纯把区间里出现的设置为1,不好体现重叠的概念,如果使用三种状态…

【Linux】- 权限

目录 一、Linux常用热键 (1)、history: (2)、单击tab键 / 双击tab键 (3)、快捷键ctrl c 和 ctrl d 二、关机指令 shutdown 三、window与linux互传文件 四、不同linux系统间互传文件 …

C++(友元、异常机制、静态成员、单例模式)

友元 友元可以访问与其好友关系的类中的私有成员,使用friend关键字进行修饰。(友元破坏了类的封装性)。 特点 (1)友元是单向的 (2)友元不能传递 (3)友元…

Halcon区域分割之分水岭分割法

现实中我们见到过有山有湖的景象,那么一定是水绕山、山围水的情形。当然可在需要的时候人工构筑分水岭,以防集水盆之间的互相穿透。而区分高山与水的界线以及湖与湖之间的间隔,就是分水岭。 分水岭分割法是一种基于拓扑理论的数学形态…

【python】OpenCV—Tracking(10.4)—Centroid

文章目录 1、任务描述2、人脸检测模型3、完整代码4、结果展示5、涉及到的库函数6、参考 1、任务描述 基于质心实现多目标(以人脸为例)跟踪 人脸检测采用深度学习的方法 核心步骤: 步骤#1:接受边界框坐标并计算质心 步骤#2&…

使用Jupyter Notebook进行数据科学项目

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 使用Jupyter Notebook进行数据科学项目 Jupyter Notebook 简介 安装 Jupyter Notebook 创建和管理 Notebook 编写和运行代码 示例…

MR30分布式IO:石化行业的智能化革新

在浩瀚的工业领域中,石化行业如同一座巨大的化工厂,将自然界的原始资源转化为人们日常生活中不可或缺的各种产品。然而,随着生产规模的扩大和工艺复杂度的提升,石化行业面临着前所未有的挑战:如何在保证生产效率的同时…

Android 使用ninja加速编译的方法

ninja的简介 随着Android版本的更迭,makefile体系逐渐增多,导致make单编模块的时间越来越长,每次都需要半个小时甚至更长时间,其原因为每次make都会重新加载所有mk文件,再生成ninja编译,此完整过程十分耗时,实际编译代码仅占其中的一小部分。 因此我们可以使用google提…

要在微信小程序中让一个 `view` 元素内部的文字水平垂直居中,可以使用 Flexbox 布局

文章目录 主要特点:基本用法:常用属性: 要在微信小程序中让一个 view 元素内部的文字水平垂直居中,可以使用 Flexbox 布局。以下是如何设置样式的示例: .scan-button {display: flex; /* 启用 Flexbox 布局 */justify…

网关如何传递信息给微服务

前情回顾 上篇我们已经完成了网关对所有微服务请求的拦截以及JWT的登录校验。 客户端和微服务之间的桥梁--网关(身份校验)https://mp.csdn.net/mp_blog/creation/editor/143425484 问题引入 现在的问题是在一些微服务业务中,需要用到用户…

ubuntu 24.04中安装 Easyconnect,并解决版本与服务器不匹配问题

下载安装包 下载地址 https://software.openkylin.top/openkylin/yangtze/pool/all/ 页面搜索 easyconnect 选择 easyconnect_7.6.7.3.0_amd64.deb安装 sudo dpkg --install easyconnect_7.6.7.3.0_amd64.deb卸载 sudo dpkg --remove easyconnect出现的问题 安装以后第…

Learn QOpenGL 读取obj模型

/* ** File name: OpenGLModelWidget.h ** Author: ** Date: 2024-10-31 ** Brief: 读取模型文件并渲染的OpenGL控件 ** Copyright (C) 1392019713qq.com All rights reserved. */#ifndef OpenGLModelWidget_H #define OpenGLModelWidget_H#include…

C++入门基础知识133—【关于C 库函数 - asctime()】

成长路上不孤单😊😊😊😊😊😊 【14后😊///C爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于C 库函数 - asctime()的相关内容&#x…