多线程
线程:程序的一个执行流,每个线程都有自己专有的寄存器,代码区是共享的,不同的线程可以执行相同的函数
多线程:为了提高JVM的执行效率,Java提供多线程机制,增强数据处理效率
多线程优点:提高CPU的利用率,在不同的时间片处理不同的线程
多线程缺点:
等候使用共享资源造成程序的运行速度变慢;
对多线程的管理需亚额外的开销;
线程死锁,较长的资源等待;
对共有变量的同时读写,会导致数据不一致性,程序员无法预知
多线程使用场景:耗时或占用大量处理器的任务,阻塞用户界面操作;各个任务必须等待外部资源(如远程文件,Internet连接)
并发:多个线程操作相同的资源,保证线程安全,合理使用资源
线程安全:当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类时线程安全的。
线程安全体现在以下三个方面:
原子性:提供了互斥访问,同一时刻只能有一个线程来对他进行操作
可见性:一个线程对主内存的修改可以及时的被其他线程观察到
有序性:一个线程观察其他线程中的指令执行顺序,由于指令重排序的存在,该观察结果一般杂乱无序
分布式
分布式是为解决单个物理服务器容量和性能瓶颈问题采用的优化手段。可以采用水平扩展和垂直拆分方式。
水平扩展:添加机器,将流量平分到所有的服务器,所有机器可提供相同的服务
垂直拆分:前端多种查询请求时,可将不同的需求发送到不同的机器(如A机器处理余票查询,B机器处理支付请求)
高并发
高并发是短时间内遇到大量的操作请求(如双11下单,12306购票)
处理指标:响应时间,吞吐量,每秒查询率QPS,并发用户数
处理方法:
通过分布式技术,将流量分到不同的物理服务器上,采用多线程技术,将一台服务器能力最大化,
流量优化:防盗链处理
前端优化:减少HTTP请求(例如精灵图),添加异步请求,启用浏览器缓存和文件压缩,CDN加速,建立独立图片服务器
服务端优化:页面静态化,并发处理,队列处理
数据库优化:数据库缓存,分库分表、分区操作,读写分离,负载均衡
web服务器优化:负载均衡