多线程和高并发的区别

  “高并发和多线程”总是被被一起提起,给人的感觉好像他们相等,其实 高并发 不等于 多线程

  多线程是完成任务的一种方法,高并发是系统运行的一种状态,通过多线程有助于系统承受高并发的状态的实现。

        高并发是系统运行过程张遇到的一种“短时间内遇到大量的操作请求” 的情况,主要发生在web系统集中大量访问或者socket端口集中行收到大量请求(例如12306抢票;天猫双十一活动)。该情况会导致系统在这段时间内大量操作,例如对资源的请求,对数据库的集中操作等。如果并发处理不好,不仅降低了客户体验度(请求时间过长) ,同时可能导致宕机,系统停止工作等。如果想要系统适应高并发的状态,则需要从,硬件,软件,网络,系统架构,开发语言的选取,数据结构的运用,算法优化,数据库优化等。。。而多线程只是解决方案其中之一。

       实现高并发需要考虑:

  (1)系统的架构设计,如何在架构层面减少不必要的处理(网络请求,数据库操作等)

  (2)网络拓扑优化网络请求的时间,如何设置网络拓扑的结构,分布式如何实现

  (3)服务集群,负载均衡

  (4)系统代码级别的优化,如何选取合适的设计模式,哪些需要是单例,哪些需要是尽量减少new操作

  (5)提高代码层面的运行效率,如何选取合适的数据结构进行数据的存取,如何设计合适的算法。

  (6)任务级别的同异步操作,在哪里同步,在哪里异步。

  (7)jvm调优 是以server模式还是以client模式运行,如何设置Heap、Stack、Eden的大小,如何选择GC策略,控制Full GC的频率。

  (8)数据库级别的优化,如何减少增删改查的时间。数据库的选取,数据库表设计,数据库索引,触发器的设计。是否使用读写分离,是否考虑数据仓库。

  (9)缓存数据库的使用,如何选取缓存数据库?是使用Redis还是使用Memcache?如何设置缓存机制。

  (10)数据通讯问题,如何选择数据通讯方式?是使用TCP还是UDP,是使用长连接还是短连接,是NIO还是BIO,是netty还是原生的socket?

  (11)操作系统的选取是winserver还是Linux还是Unix、

  (12)硬件的配置,8G内存还是32G内存...

  以上问题需要在高并发中深入的考虑,想木桶原理一样,只要其中的某一个方面没有考虑到,会造成系统的瓶颈,影响整的性能。而高并发不仅涉及面之广而且有要求有足够的深度。

        多线程知识从同/异步角度上解决高并发的问题的其中之一的方法手段,是在同一时刻利用计算的闲置资源。

       多线程在解决高并发的问题中所起到的作用是使用计算机的资源在每一个时刻都能达到最大的利率,不至于浪费计算机的闲置资源。

原文地址:https://www.cnblogs.com/BluceLee/p/14085616.html