84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
项目使用flask框架,是个较复杂的推荐系统,需要从设定的各类数据源取(有些复杂的排序、过滤)推荐数据,大部分数据存取使用redis,经过常规优化后取数据控制在200ms以内。为进一步大幅度提升性能采用gevent作为并发框架,但是发现性能反而下降了大概25%,原来一个数据源就30ms,改造后上升到一两百毫秒都有,这是为什么?这种情况大家会怎么进一步调优了。(使用场景除了比较集中的取数据模块,其他地方还有零星用到gevent)
光阴似箭催人老,日月如移越少年。
这个问题有点复杂,建议题主将环境以及启动参数,运行的进程数量,以及如何运行的情况介绍一下。
在没有这些条件的情况下,我想以我自己的理解谈一下这个问题,这个问题原意题主是想借 gevent 提高性能,但是发现性能反而降低,那么这个时候需要考察一下性能在哪降低了。
题主衡量性能降低的标准是获取数据的时间变长了,这里我说一下个人的见解,首先,题主不知道了不了解 gevent 的工作方式,gevent 的作用一条线程跑多个协程,适合多 IO 操作,如果夹杂稍微多 CPU 操作的,时间上就不好把握了,例如题主这里,要求的是几十 ms 级别的,万一你哪一个协程跑个一两百ms 的 CPU 运算,那么即使你其他协程IO再快也无济于事。
而且,需要强调的是引入 gevent 不会加快获取数据的速度,例如,原来是 30ms,引入之后不会变少,只会变多,那么引入的好处是什么?原来你能在1秒之内接待33个客户端请求,引入之后可能可以接待100个/s,也可能接待 300个/s,这才是 gevent 的好处。
在不完全理解题主环境的情况下只能提这么多建议,如果题主没理解的话可以提供一下之前的说的信息进一步分析。
这个问题有点复杂,建议题主将环境以及启动参数,运行的进程数量,以及如何运行的情况介绍一下。
在没有这些条件的情况下,我想以我自己的理解谈一下这个问题,这个问题原意题主是想借 gevent 提高性能,但是发现性能反而降低,那么这个时候需要考察一下性能在哪降低了。
题主衡量性能降低的标准是获取数据的时间变长了,这里我说一下个人的见解,首先,题主不知道了不了解 gevent 的工作方式,gevent 的作用一条线程跑多个协程,适合多 IO 操作,如果夹杂稍微多 CPU 操作的,时间上就不好把握了,例如题主这里,要求的是几十 ms 级别的,万一你哪一个协程跑个一两百ms 的 CPU 运算,那么即使你其他协程IO再快也无济于事。
而且,需要强调的是引入 gevent 不会加快获取数据的速度,例如,原来是 30ms,引入之后不会变少,只会变多,那么引入的好处是什么?原来你能在1秒之内接待33个客户端请求,引入之后可能可以接待100个/s,也可能接待 300个/s,这才是 gevent 的好处。
在不完全理解题主环境的情况下只能提这么多建议,如果题主没理解的话可以提供一下之前的说的信息进一步分析。