精华内容
下载资源
问答
  • 怎么解决高并发

    2019-03-18 15:05:11
    1.对数据库进行读写分离 2.把访问高的数据放到redis 3.把模糊搜索的信息放到solr或es里 4.对访问高的页面进行静态化 ...在我们的电商项目,会有某一件商品许多用户去访问,这个时候就会产生高并发,我...

    1.对数据库进行读写分离

    2.把访问高的数据放到redis

    3.把模糊搜索的信息放到solr或es里

    4.对访问高的页面进行静态化

    5.动静分离

    6.抽取访问高的功能进行重构,并做集群

    7.对于传输的数据量较大时,可以放到消息队列里面

    8.高性能服务器,高性能数据库,高效率的编程语言,还有高性能的web容器

    在我们的电商项目,会有某一件商品许多用户去访问,这个时候就会产生高并发,我解决的方式就是使用redis缓存区解决

     

    展开全文
  • 多线程怎么解决高并发? synchronized关键字主要解决多线程共享数据同步问题。 ThreadLocal使用场合主要解决多线程中数据因并发产生不一致问题。 ThreadLocal和Synchonized都用于解决多线程并发访问但是ThreadLocal...

    多线程怎么解决高并发?
    synchronized关键字主要解决多线程共享数据同步问题。
    ThreadLocal使用场合主要解决多线程中数据因并发产生不一致问题。
    ThreadLocal和Synchonized都用于解决多线程并发访问但是ThreadLocal与synchronized有本质的区别:
    synchronized是利用锁的机制,使变量或代码块在某一时该只能被一个线程访问。而ThreadLocal是为每一个线程都提供了变量的副本,使得每个线程在某一时间访问到的并不是同一个对象,这样就隔离了多个线程对数据的数据共享。而Synchronized却正好相反,它用于在多个线程间通信时能够获得数据共享。

    展开全文
  • 今天被问到怎么解决高并发问题。

    今天被问到怎么解决高并发问题。

    参考文章:

    (1)今天被问到怎么解决高并发问题。

    (2)https://www.cnblogs.com/zyh1994/p/5965402.html

    (3)https://www.codeprj.com/blog/5b065a1.html


    备忘一下。


    展开全文
  • 当提到高并发的时候,很多人就有疑问,到底什么是高并发编程? 以登录功能为例。当登录的时候,是用户拿用户名,密码到数据库里访问是否存在,存在则跳转到登录页面。然后修改访问次数为+1.否则跳转到失败页面,访问...

    当提到高并发的时候,很多人就有疑问,到底什么是高并发编程?

    以登录功能为例。当登录的时候,是用户拿用户名,密码到数据库里访问是否存在,存在则跳转到登录页面。然后修改访问次数为+1.否则跳转到失败页面,访问次数不加1.

    当一个用户进行访问的时候,是不存在并发性问题的。因为用户查询库表,修改访问次数,不会受到别人的影响。

    但是当两个用户访问的时候,在查询库表的时候,假定两个用户是顺序的。第一个登陆进来,完成了修改登陆次数的操作之后,第二个用户才登陆进来。那么这个也是不存在并发性问题的。

    那什么时候出现的并发性问题呢?当有很多个用户同时登陆,假定恰好一个用户刚查询到自己的账号和密码,然后把登陆次数从库表读到了内存中,还没来得及该表,就是说还没来得及修改登陆次数,这个时候又来了一个用户查询自己的账号和密码,虽然后面的账号来的晚,但由于存在表中的顺序靠前,查询的块,接下来去表里取登陆次数早于第一个用户提交结果到表(实际上和第一个用户获取到的登陆次数是一样的,因为第一个用户还没来得及修改表里的这条记录),然后再到库表中修改自己的登陆次数。这个时候,当第一个用户再修改登陆次数的时候,由于是基于自己读取到的登陆次数进行加1的操作,就会丢失掉第二个用户的登陆次数。实际上两个用户虽然都登陆了,但实际上只记录了一个用户的登陆次数(丢失修改)。如果同时登陆的用户数非常多(例如一毫秒1个(一次数据库操作需要几个毫秒)),就会出现很多这类问题。

    上面是并发造成的问题之一,是数据安全性问题。究其原因是什么呢?是因为登陆次数是很多个用户共享的,而且是共享修改和读取的。为什么同样高并发的用户登陆,对于登陆的账号不会出现安全性问题呢,因为不涉及修改操作,也不涉及共享数据(查询的不是同一条记录,且结果不相互影响)。因此可以这么下结论:只有出现共享数据的问题才会有并发的数据安全性问题。

    当然,并发的数据安全性问题不仅仅局限于上述的场景,还会包含,诸如脏读等问题。

    那么我把登陆次数的访问和修改加锁,是否可以完全解决并发性的数据安全性问题呢?通过一个锁来控制对登陆次数的修改,一次只能一个用户修改,直到修改完登陆次数,释放锁,才允许下个用户访问。

    这完。但又有一个新的全可以解决一部分安全性问题问题,锁也会成为多个线程的共享数据,既然锁是共享数据,也不可避免的出现了并发修改的问题,那再对锁加锁的话,显然就进入极限但不收敛的状态了。不是100%可靠。

    很多人不理解,锁为什么也会导致并发不安全?锁读的时候会进行判断的啊,为何还不行?这里就有一个很隐晦的问题了:指令优化。

    正常情况下,我们代码顺序执行,先判断锁的状态,是否锁住了。然后如果没有锁住,则进入,否则持续间隔时间访问锁的状态,直到锁被其他线程释放,然后才进入。按理说不存在像从数据库表里读记录到内存,会出现时间差的问题,导致顺序出现差异,为何还会有并发性问题呢?

    这里得讲一个原理:jvm指令优化。

    我们知道,.java后缀的源代码要被java虚拟机执行,需要进行编译成 .class 后缀的文件。那这个class文件要被虚拟机执行,实际上里面的代码指令,不再是我们写的那些 public,static main String int等关键字了。会被转换成 另外的一个指令集(如load,read,reload等)这个指令集的转换,是编译器进行的。我们直观的理解,编译器会按照顺序编译,即编译器会根据某个顺序将我们的一行java代码转换成class后缀的文件。可实际上并非如此。实际上编译器有编译语法,也有优化语法。会根据具体场景做一些执行顺序上的优化。这些顺序上的优化,可能是将两次相邻的读一个数据的操作合并为一个语句进行执行(单线程情况下,编译器判断为指令重复,将两条对某个数据读操作相邻(可能中间含有其他数据的其他操作,但也认为是相邻)进行优化成了一条读指令)。但在并发情况下,这种合并会出现诸如上面两次读取,中间另外一个线程修改数据而导致结果不一样的情况。是不能进行简化成一次读取的。所以就出现了,优化后的语句,执行在并发情况下,是和顺序执行的顺序不一致的结果。所以我们说,是由于jvm指令编译的优化,导致了锁并发的失效。

    如果你读过java并发编程的艺术一书,可能知道这个时候应该用volatile关键字修饰锁,不允许jvm优化。这总可以解决并发问题了吧。

    那是否就能万无一失了呢?答案告诉你,还是否定的。这是为什么呢?

    再讲一个原理:汇编指令优化

    我们知道jvm是操作系统层面的执行指令集。实际上,我们执行指令最终是硬件的电气特性。这个电器特性在执行的过程中,只认一个东西,就是01.指令。那么我们jvm层面的class文件对应的指令集(诸如load,read等)是如何被运行的呢?答案是,先有编译器,转换成汇编指令,再由编译器转换成二进制指令。

    刚才我们说了,volatile可以禁止掉jmv编译时进行优化,那汇编的过程中,实际上也是有类似的相同的问题的,也是会进行相似的优化指令执行的顺序的。当合并两次读操作的时候,同样在另外一个线程在两次读操作之间进行了写入(这里的是class指令的read,load),会导致两次结果不一致的情况。这时,虽然加了volatile关键字。或者使用的是原子变量(也是禁止编译时指令优化),也都是不够线程安全的。

    那么怎么办呢?并发编程的艺术上,对该问题提出了ABA的模型。以及对应的解决范式。具体本文不详细写。需要的同学私信获取答案。

    为什么ABA的模型可以解决并发情况下多线程的数据安全性问题呢?是因为它避免了在汇编过程中进行指令优化时带来的执行顺序的异常。

    上面讲了并发性的数据安全性问题。

    那么是否高并发编程解决了并发的多线程的数据安全性问题是否就解决了高并发的问题呢?

    答案还是 不是。

    高并发除了数据安全性问题。还有一个层面的问题:资源瓶颈。

    这又是为什么呢?当一个用户登陆的时候,读取的是一个用户的信息到内存,进行比较。

    假设内存1g,一个用户信息1M,那么在内存里面最多同时可以有用户信息1024条(不考虑其他程序占用内存的情况)。假设登陆在一万个用户来的时候,对数据库的压力导致访问时间延长为1s,那么在一秒的时间内,这个1g内存只能供给1024个用户进行登陆。来了一万个用户,就需要将近10s的时间,内存才会完全的处理完毕登陆操作。因此,如果其他资源够用的情况下,超过1024个用户同时登陆,必然会出现内存是瓶颈的问题。(可以按照该方式进行计算内存的负载能力)。那实际情况下,并非完全如此。因为当内存使用量达到一定比例的时候,可能会触发与硬盘的缓存的交互(涉及到调度算法)。如果在高位频繁出现或持续在高位导致频繁调度,就会对cpu造成压力(调度算法是计算密集型任务,比较耗cpu资源),严重可能直接导致cpu使用率100%出现死机的状况。这个时候,资源瓶颈就转换到cpu。

    再换个场景,比如是下载资源或者上传资源文件的接口,这个很好理解,当很多用户同时上传的时候,网络带宽有限,会挤爆网络,导致上传失败或者下载失败。这个情况下高并发的资源瓶颈在网络。

    其他硬件都可能因为高并发的功能不一样导致资源瓶颈。那我们就说,高并发实际上也是资源瓶颈问题。

    如果我们硬件很给力,完全够用,是否高并发问题就好了呢?

    这里其实还有一个层面:软件程序编写。

    如果程序在多次调用不释放资源的情况下,也是会造成虽然访问不是在同一时刻,仍然可能出现资源耗尽的问题。那可能就是上个时间段占用的资源(例如map占用了内存)在很长时间内无法释放。导致虽然不是同一时刻访问的多个线程,也会出现资源耗尽的情况。这也算是高并发的一个方面。所以,写代码的时候,要对代码质量进行把控,也有个词,叫幂等性。

    基于以上讲解,高并发编程实际上主要解决以上几个方面:

    1.共享数据的安全性问题

    2.共享资源的瓶颈问题

    3.共享资源的使用性问题

    解决了以上三个大问题,并发编程和其他的编程,也就不存在考虑不到的死角问题了。高并发并不可怕,掌握以上三大方面,高并发也只不过是找到一个上限值的问题了。

    展开全文
  • redis的高并发处理方式其实redis是不会存在并发问题的,因为他是单进程的,再多的命令都是一个接一个地执行的。我们使用的时候,可能会出现并发问题,比如获得和设定这一对。Redis的为什么 有高并发问题?Redis的的...
  • 从数据库的角度。我们使用mycat做读写分离,优化数据库从静态页的角度。 我们将商品详情页生成静态页。从图片资源。...另外,我们微服务的拆分,运行在不同的服务器上,本身就有一定的应对高并发的能力。...
  • <div><p>如题</p><p>该提问来源于开源项目:bilive/bilive_client</p></div>
  • 高并发 问题怎么解决

    2021-02-19 14:49:01
    高并发 问题怎么解决
  • 高并发怎么解决

    2020-06-19 15:01:22
    我们说的高并发是什么? 上面的定义明显不是我们通常所言的并发,在互联网时代,所讲的并发、高并发,通常是指并发访问。也就是在某个时间点,有多少个访问同时到来通常如果一个系统的日PV在千万以上,有可能是一个...
  • 场景: 类似银行存取,增减账户余额,...更新同一条记录可以通过增加version字段解决高并发同时写的问题 但是明细表中先读取原先余额再写入新余额,这个怎么解决,怎么能让每次读出余额是最新的,写入明细之前余额不会被修改
  • 怎么产生的高并发 高并发如何解决

    千次阅读 2018-04-22 22:07:00
    经典例子:秒杀订单模拟场景:商城做一个秒杀活动,秒杀的商品数量为10,秒到即得方案:1.应用层做首次过滤因为考虑到处理的失败,我们要给... 缓存的处理是在内存上处理的,效率非常,但是在这个层面处理过后要二...
  • 高并发技术解决方案: 1、CDN来解决图片文件等访问(cdn简称网络边缘服务器,使客户就近获取内容) 2、 分布式缓存:redis、memcached等。 3、数据库垂直拆分和水平拆分(分库分表)等。(垂直拆分是把不同的表拆到...
  • 那么,当遇见服务器高并发时,应该怎么解决呢? 高并发衡量指标: 响应时间:系统对请求做出响应的时间,即一个http请求返回所用的时间; 吞吐量:单位时间内处理的请求数量; QPS(TPS):每秒可以处理的请求数...
  • PHP高并发和大流量的解决方案 一 高并发的概念 在互联网时代,并发,高并发通常是指并发访问。也就是在某个时间点,有多少个访问同时到来。 我的官方群点击此处。 二 高并发架构相关概念 1、QPS (每秒查询率)...
  • <p>app高并发问题怎么解决?问题怎么复现?app抢票问题,出现多并发</p>
  • 因为数据库高并发导致网页延迟或打不开 现在每秒的高并发值是2万 应该怎么解决
  • 但是版本以及版本的迭代,数据库需要承受更多的高并发已经成了 架构设计 需要考虑的点。 那么解决问题,就得说到方案。但是方案有很多,我们该怎么选择呢? 优化与方案 基本上,我们优化要从几个关键字入手: 短距离...
  • 系统高并发出现 重复数据 怎么解决? 系统随着业务的增长,接口请求量也增加。最常见的问题数据重复,涉及到资金的影响就很大。还有问题就是查询少量的数据,要很长时间。其他还有其他一些问题。这次先介绍处理数据...
  • php解决高并发问题

    2018-06-29 15:56:39
    高并发的实际场景下,机器都处于高负载的状态,在这个时候平均响应时间会被大大增加。 普通的一个p4的服务器每天最多能支持大约10万左右的IP,如果访问量超过10W那么需要专用的服务器才能解决,如果硬件不给力 ...
  • PHP高并发和大流量的解决方案 一 高并发的概念 在互联网时代,并发,高并发通常是指并发访问。也就是在某个时间点,有多少个访问同时到来。 我的官方群点击此处。 二 高并发架构相关概念 1、QPS (每秒查询率)...
  • 但是版本以及版本的迭代,数据库需要承受更多的高并发已经成了 架构设计 需要考虑的点。 那么解决问题,就得说到方案。但是方案有很多,我们该怎么选择呢? 基本上,我们优化要从几个关键字入手: 短距离 , 少数据...
  • PHP中如何解决高并发

    2017-06-28 16:32:00
    PHP中如何解决高并发 1:硬件方面 普通的一个p4的服务器每天最多能支持大约10万左右的IP,如果访问量超过10W那么需要专用的服务器才能解决,如果硬件不给力 软件怎么优化都是于事无补的。主要影响服务器的速度 有...
  • JAVA 怎么处理高并发

    2017-01-17 09:53:22
    对于一些大型网站,比如门户网站,在面对大量用户访问、高并发请求方面,基本的解决方案集中在这样几个环节:使用高性能的服务器、高性能的数据库、高效率的编程语言、还有高性能的Web容器。这几个解决思路在一定...
  • 我们该怎么解决呢? 要想解决这个问题,我们必须清楚为什么在高并发环境下,AtomicLong的效率会变低。 AtomicLong底层运用的是CAS算法,是一种无锁保证线程安全的算法,在一般情况下可以提高我们程序的运行效率,...
  • 通过前面几天的学习,我们在面对高并发流量时,为了应对大量读写请求,特此将我们的普通存储系统开发成了一套分布式存储系统。主要基于读写分离主从复制以及数据分库分表实现的。不清楚的可以再回去看看啊数据库读写...
  • 求教互联网项目高并发,怎么解决?
  • JAVA中怎么处理高并发的情况 一、背景综述 并发就是可以使用多个线程或进程,同时处理(就是并发)不同的操作。 高并发的时候就是有很多用户在访问,导致系统数据不正确、糗事数据的现象。对于一些大型网站,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 998
精华内容 399
关键字:

怎么解决高并发