当前位置: 首页 > Linux

高并发与多线程

时间:2023-04-06 20:04:51 Linux

1.什么是高并发?大量集中访问收到大量请求(例如:12306抢票情况;天猫双十一活动)。这种情况的发生会导致系统在这段时间内进行大量的操作,比如请求资源、数据库操作等。2、高并发处理指标一些常用的与高并发相关的指标有:响应时间、吞吐量、每秒查询率QPS、并发用户数1、响应时间(ResponseTime)响应时间:系统响应的时间要求。比如系统处理一个HTTP请求需要200ms,这200ms就是系统的响应时间。2.吞吐量(Throughput):单位时间内处理的请求数。3、QPS(QueryPerSecond)QPS:每秒响应请求数。在互联网领域,这个指标和吞吐量的区别不是那么明显。4.并发用户数并发用户数:同时承载正常系统功能的用户数。例如,在即时通信系统中,同时在线用户数在一定程度上代表了系统的并发用户数。3、高并发与多线程的关系与区别“高并发与多线程”总是被放在一起提及,给人的感觉是两者似乎是平等的,但实际上高并发≠多线程3.1、多-线程和多线程是Java的特点,因为现在的CPU都是多核多线程的,可以同时执行多个任务。为了提高jvm的执行效率,Java提供了这种多线程机制来增强数据处理效率。多线程对应CPU,高并发对应访问请求。您可以使用单个线程处理所有访问请求,也可以使用多个线程同时处理访问请求。在过去的单CPU时代,单个任务只能在一个时间点执行单个程序。然后发展到多任务阶段,计算机可以在同一时间点并行执行多个任务或进程。虽然不是真正意义上的“同一时间点”,但多个任务或进程共享一个CPU,操作系统交由操作系统完成CPU在多个任务之间的切换,让每个任务有机会获得一定的时间。时间片运行。后来发展了多线程技术,使得一个程序内可以有多个线程并行执行。线程的执行可以看作是CPU执行程序。当一个程序在多线程下运行时,就好像多个CPU同时在执行这个程序一样。简而言之,多线程可以这样理解:多线程是一种处理高并发的编程方式,即并发需要用多线程来实现。3.2.高并发高并发并不是JAVA独有的东西。提供更好的互联网服务,是广义上与语言无关的概念。典型场景,比如:12306抢火车票,天猫双十一闪购等。这种情况的发生会导致系统在这段时间进行大量的操作,比如请求资源,对数据库的操作,等等。高并发如果处理不好,不仅会降低用户体验(请求响应时间过长),还可能导致系统宕机,严重的情况甚至OOM异常,系统停止工作等。*如果你想系统要能够适应高并发状态,需要从各个方面对系统进行优化,包括硬件、网络、系统架构、开发语言的选择、数据结构的使用、算法优化、数据库优化等。.而多线程只是解决方案之一。四、多线程并发技术Java多线程编程会涉及到以下几个技术点:1、并发编程的三要素(volatile)原子性:一个不能再分的粒子。Java中的原子性意味着一个或多个操作要么全部成功,要么全部失败。有序性:程序执行的顺序按照代码执行的顺序执行。(处理器可能会对指令重新排序)可见性:当多个线程访问同一个变量时,如果其中一个线程修改了它,其他线程可以立即得到最新的值。2、线程创建状态的五种状态:使用new操作符创建线程时,就绪状态:调用start方法,就绪状态的线程不一定马上执行run方法,还需要等待CPU的调度运行状态:CPU开始调度线程,开始执行run方法阻塞状态:线程在执行过程中,由于某些原因进入阻塞状态,比如:调用sleep方法,试图获取锁等死状态:run方法正在执行或执行过程中遇到异常具体线程语句循环图:3.悲观锁和乐观锁悲观锁:每次操作都会加锁,会导致线程阻塞(同步)。乐观锁:每个操作不加锁,但是假设没有冲突就完成一个操作。如果因为冲突而失败,则重试直到成功,不会造成线程阻塞。4、线程间的协作线程间的协作包括:wait/notify/notifyAll/Condition/Lock等。5、synchronized关键字synchronized是Java中的一个关键字,是同步锁的一种。它修改的对象如下:1)修改一个代码块:修改后的代码块称为同步语句块,其作用范围为花括号{}括起来的代码,作用对象为调用this代码块2)、修改一个方法:修改后的方法称为同步方法,它的作用域是整个方法,作用的对象是调用这个方法的对象3)、修改一个静态方法:它的作用域action是整个Static方法,action的对象是这个类的所有对象4)、修改一个类:它的action作用域是synchronized后括号里的部分,action的主要对象是这个类的所有对象.6、CASCAS的全称是CompareAndSwap,即比较和替换,是一种实现并发应用的技术。一个操作需要三个操作数——一个内存位置(V)、一个预期的旧值(A)和一个新值(B)。如果内存位置的值与预期的原始值匹配,处理器会自动用新值更新该位置的值。否则,处理器什么都不做。CAS中存在三大问题:ABA问题(AtomicReference);周期长,开销大;以及只能保证一个共享变量的原子操作(AtomicInteger、Unsafe);7.线程池如果我们使用线程,我们会创建一个线程。虽然简单,但是有一个大问题。如果有大量并发线程,并且每个线程执行完一个短任务后就结束了,那么频繁创建线程会大大降低系统的效率,因为频繁创建和销毁线程是需要时间的。通过多路复用,线程池可以大大减少频繁创建和销毁线程带来的性能损失。五、高并发技术解决方案5.1.如何提高系统的高并发能力?1、静态资源结合CDN(ContentDeliveryNetwork)解决图片文件的访问等2、分布式缓存:redis、memcached等3、消息队列中间件:rocketMq、activeMQ、kafka等,解决大量消息的异步处理能力。4、应用拆分:一个项目拆分成多个项目部署,通过RPC(微服务)解决多个项目之间的通信。5、数据库垂直拆分、水平拆分(分库分表)等。6、数据库读写分离,解决大数据查询问题。7、使用nosql,比如mongoDB结合mysql。8、建立大数据接入条件下的服务降级限流机制。