并发、并行、高并发和多线程

1.并发和并行的区别

  • 并发:当有多个线程在操作时,如果系统只有一个CPU,把CPU运行时间划分成若干个时间段,分配给各个线程执行,在一个时间段的线程代码运行时,其它线程处于挂起状态。这种方式我们称之为并发(Concurrent)。并发=间隔发生
  • 并行:当系统有一个以上CPU时,则线程的操作有可能非并发。当一个CPU执行一个线程时,另一个CPU可以执行另一个线程,两个线程互不抢占CPU资源,可以同时进行,这种方式我们称之为并行(Parallel)。   并行=同时进行
  • 高并发是互联网分布式系统架构设计中必须考虑的因素之一,通常是指通过设计保证系统能够同时并行处理很多请求。
  • 区别:并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔内发生。

2.高并发是短时间内大量访问和请求,例如12306抢票和天猫双11活动,想系统能够适应高并发状态,则需要全面优化优化,包括,硬件、网络、系统架构、开发语言的选取、数据结构的运用、算法优化、数据库优化……而多线程只是其中解决方法之一。

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

3.实现高并发需要考虑:

  • 系统的架构设计,如何在架构层面减少不必要的处理(网络请求,数据库操作等)
  • 网络拓扑优化减少网络请求时间、如何设计拓扑结构,分布式如何实现?
  • 系统代码级别的代码优化,使用什么设计模式来进行工作?哪些类需要使用单例,哪些需要尽量减少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?

猜你喜欢

转载自blog.csdn.net/w584212179/article/details/85090784