共计 1500 个字符,预计需要花费 4 分钟才能阅读完成。
大家好,我是借力好风。
前言
置信大多数刚工作的 Java 程序员很少应用并发编程(说的就是阿借本人),个别利用场景就是用线程池开启一个异步工作来执行。并发编程在 Java 语言中恰好又是属于难点,如何了解和把握并发编程的外围,如何学会编写正确的并发程序,冲破零碎在高并发场景的瓶颈等等问题,都是须要咱们一直的入门学习和进阶晋升本人并发编程能力的。
学习并发编程前,咱们先弄明确几个问题:
- 并发 到底是什么?
- 零碎如何撑持 高并发?
- 并发量 的决定因素有哪些?
了解零碎并发
明天是 2021 年 10 月 29 日,马上迎来”双十一“,电商又双叒叕要开始大战了!这场没有硝烟的背地,说到底,是零碎并发能力的博弈!谁的服务要害时候不宕机,谁就多到账一分!阿借掐指一算,最初还是阿里获胜!
开个玩笑,毫无悬念每年都是阿里获胜😂。。。
零碎的并发量,简略来说,就是零碎可能共事解决的申请数量。
并发量的下限,间接反映了零碎解决多个工作能力程度。
掂量并发量的 指标 个别有两个:
- TPS:Transactions Per Second,示意每秒解决的事务数
- QPS:Queries Per Second,示意每秒解决的查问数
那么,到底哪些因素决定了零碎的并发数呢?如何进步零碎并发数?
零碎并发数的进步
硬件 和软件 ,两者都是零碎架构的并发性能的决定因素。其中,最基本的还是 硬件 , 软件的实质 是最大限度的利用硬件资源来实现计算和提供服务的。
硬件的组成:CPU、内存、磁盘、网卡、带宽等。
硬件根底性能的晋升,次要在于花钱降级硬件,例如:
- 从单核 CPU 换成 AMD 线程撕裂者的 64 核(都 1202 年还不是 AMD yes!🙋)
- 从 8G 内存降级到 16G、32G……
- 磁盘采纳 SSD 硬盘
- 应用千兆网卡
- 更换更大的带宽(这里说下挪动的 200M 带宽,阿借收费用了四个月,感觉还能够,毕竟白嫖 yyds😁)
硬件的配置晋升,软件也就可能有更大的空间施展。这里有典型的两个场景,I/ O 性能要求高且内存足够时(也称作 I / O 密集型),咱们能够把更多的数据存入内存,缩小和磁盘的交互来晋升 I / O 的性能。当须要海量运算时(也称作 CPU 密集型),能够采纳多线程的形式来解决,让 CPU 的多外围来帮忙调配和解决计算工作。
当单个计算机的硬件资源达到瓶颈时,个别采纳程度扩大的形式来晋升性能。利用多台计算机资源组成一个分布式计算机来提供服务,造成根本的分布式服务架构。这种架构也会使得零碎的复杂度减少,比方要思考服务治理、服务监控、服务高可用等。
一个高并发利用,零碎架构最外围的问题就是如何让更多用户在最短的工夫内取得响应并实现最终的指标操作,个别用 RT(Response-Time)作为掂量指标,RT 的数值反馈了整个零碎的快慢,所以实质上还是和硬件资源的瓶颈无关。
在软件层面,也有一些其余的优化计划:
- 集群化部署,多节点机器摊派申请流量,升高单节点的计算瓶颈。
- 对于某些特点场景,采纳多线程异步执行的形式进行优化,简略来说就是针对用户申请,服务端先返回一个正在解决的标识,用户先收到后果,而后服务端异步运行工作,当工作解决完后再返回给用户一个告诉。
- 引入缓存机制,缩小服务间接和数据库之间的交互和计算,晋升 I / O 性能,让用户更快取得数据的响应后果。
- 通过 CDN(内容散发网络)技术,让用户拜访离本人以后网络最近的节点来取得数据内容。
总之,零碎并发性能的决定因素很多,须要思考的方向很多,但线程是最根底、最重要的机制,因为它可能利用多核 CPU 机制来晋升程序的计算速度。
所以,利用好并发编程,能够让应用程序取得更多的能量,让应用程序在计算机上施展更大后劲。
下一章,阿借与你一起学习线程相干常识。
微信搜寻“借力好风”,关注阿借,及时充电。