“高并发和多线程”老是被一块儿提起,给人感受二者好像相等,实则 高并发 ≠ 多线程html
多线程是完成任务的一种方法,高并发是系统运行的一种状态,经过多线程有助于系统承受高并发状态的实现。web
高并发是一种系统运行过程当中遇到的一种“短期内遇到大量操做请求”的状况,主要发生在web系统集中大量访问或者socket端口集中性收到大量请求(例如:12306的抢票状况;天猫双十一活动)。该状况的发生会致使系统在这段时间内执行大量操做,例如对资源的请求,数据库的操做等。若是高并发处理很差,不单单下降了用户的体验度(请求响应时间过长),同时可能致使系统宕机,严重的甚至致使OOM异常,系统中止工做等。若是要想系统可以适应高并发状态,则须要从各个方面进行系统优化,包括,硬件、网络、系统架构、开发语言的选取、数据结构的运用、算法优化、数据库优化……而多线程只是其中解决方法之一。算法
实现高并发须要考虑:
系统的架构设计,如何在架构层面减小没必要要的处理(网络请求,数据库操做等)
网络拓扑优化减小网络请求时间、如何设计拓扑结构,分布式如何实现?
系统代码级别的代码优化,使用什么设计模式来进行工做?哪些类须要使用单例,哪些须要尽可能减小new操做?
提升代码层面的运行效率、如何选取合适的数据结构进行数据存取?如何设计合适的算法?
任务执行方式级别的同异步操做,在哪里使用同步,哪里使用异步?
JVM调优,是以server模式仍是以clien模式运行,如何设置Heap、Stack、Eden的大小,如何选择GC策略,控制Full GC的频率?
数据库优化减小查询修改时间。数据库的选取?数据库引擎的选取?数据库表结构的设计?数据库索引、触发器等设计?是否使用读写分离?仍是须要考虑使用数据仓库?
缓存数据库的使用,如何选择缓存数据库?是Redis仍是Memcache? 如何设计缓存机制?
数据通讯问题,如何选择通讯方式?是使用TCP仍是UDP,是使用长链接仍是短链接?NIO仍是BIO?netty、mina仍是原生socket?
操做系统选取,是使用winserver仍是Linux?或者Unix?
硬件配置?是8G内存仍是32G,网卡10G仍是1G?
……
……数据库
以上的这些问题在高并发中都是必需要深刻考虑的,就像木桶原理同样,只要其中的某一方面没有考虑到,都会形成系统瓶颈,影响整个系统的运行。而高并发问题不单单涉及面之广,同时又要求有足够的深度!!!设计模式
而多线程在这里只是在同/异步角度上解决高并发问题的其中的一个方法手段,是在同一时刻利用计算机闲置资源的一种方式。缓存
多线程在解决高并发问题中所起到的做用就是使计算机的资源在每一时刻都能达到最大的利用率,不至于浪费计算机资源使其闲置。
网络
==========================================数据结构
原文连接:多线程(一)高并发和多线程的关系转载请注明出处!多线程
==========================================架构
---end