Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
什么是高并发_java如何处理高并发问题,希望能够帮助你!!!。
对于web项目,随着用户量的增加就有可能产生高并发的问题。高并发简单的来说就是在同一时刻不同用户访问同一资源的问题,专业一点的说法就是在同一时刻有多个线程访问了同一个数据资源。
目前对于高并发大部分的解决方案都是通过锁机制,锁机制有两个层面。
一种是代码层次上的,如java中的同步锁,典型的就是同步关键字synchronized,这里我不在做过多的讲解,感兴趣的可以参考:http://www.cnblogs.com/xiohao/p/4151408.html另外一种是数据库层次上的,比较典型的就是悲观锁和乐观锁。这里我们重点讲解的就是悲观锁(传统的物理锁)和乐观锁。我所在的公司是一个汽车电商平台,所以订单量非常的大,有时候做个促销活动、发点优惠卷的时候,高并发就是一个不可忽视的问题。在架构设计设计上,采用的是乐观锁机制,通过‘version’版本字段来控制并发问题,原理我贴一段SQL就清楚了
这里就是在更新操作时验证当前订单的版本号时候被其它事务改变否则就已报错的方式,引导用户重新查询然后编辑。这样讲来比较简单,但是就是这么简单就可以处理高并发的问题,对于数据库和系统性能也不会有什么影响。以外一种悲观锁机制,一般都是通过数据库的特性来解决,数据库的四大特性中有一个隔离性,意思就是说在同一个事物内操作的数据会被加上锁,其它操作不能够访问。通过数据库加锁这种方式并不好,第一大量的锁会给数据库带来很大的开销,而且对于用户而言没有获取锁就不能操作数据,陷入等待的状态,非常不友好。
这里我引用一段架构师之路公众号究竟啥才是互联网架构高并发中的一段话来描述:
高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求
那么很多请求,具体达到多少请求才算是高并发系统呢?这个也没有明确数量上的定义,根据网上很多大型互联网公司的相关高并发博客,一般PV在千万级别以上的公司才会涉及到这个概念,所以如果某个系统的日PV在千万级别以上,可能是一个高并发系统.这里根据具体业务不同,这个数字可能高或者低一些
这里涉及到一个问题,很多同学搞不清楚并发与并行的区别,这里我根据我根据知乎上这个问题某位网友的例子,我觉得很好
并发:你有处理多个任务的能力,不一定同时(一个CPU轮流)
并行:有同时处理多个任务的能力(多个CPU同时)
并发和并行都可以是很多个线程,就看这些线程能不能同时被(多个)CPU执行,可以说明是并行,并发是多个线程被一个CPU轮流切换着执行
高并发相关指标有响应时间(Response Time),吞吐量(Throughput),每秒查询率QPS(Query Per Second),并发用户数等
响应时间:系统对某个请求做出相应的时间.例如处理一个HTTP请求,从HTTP发出到收到响应需要200ms,则200ms就是系统的响应时间.
吞吐量:单位时间内处理的请求数量
QPS:每秒响应请求数,这个感觉和吞吐量区分不大
并发用户数:同时承载正常使用系统功能的用户数量. 例如微信,同时可以x亿人在线,一定程度代表了系统的并发用户数
有以下途径:
Golang从语言层面对多核CPU支持非常好,在设计程序时运用了并发的设计理念,Go程序在运行期有可能是并行的
Rob Pike大神关于两者的阐述:“并发关乎结构,并行关乎执行”
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
上一篇
已是最后文章
下一篇
已是最新文章