并发的解决
1、队列、缓冲区
队列是天然解决高并发的手段之一,通常我们叫buffer,作用是解耦、缓冲。 例如:queue模块的类Queue、LifoQueue、PriorityQuueue(小顶堆实现,优先队列)
queue默认是先进先出,但它的问题是后面的任务是否能等到前面的任务完成。
优先队列 PriorityQueue
对于自己写的程序,如果你有大量的请求需要自己来解决,用队列将这些请求装起来,但是用户会等不及。这是竞争带来的。这些问题在处理的时候就有优先的问题了,比如说收费业务,VIP用户与普通用户,业务紧着VIP用户,并且普通用户在业务上还有一些限制。
在你处理的请求队列中有紧急任务,这时候需要使用优先队列,给任务加权重。
2、争抢
争抢也是一种高并发的解决方案,但是这样可能不好,因为有可能有些任务长时间抢不到。
一个程序抢占了资源,就锁定了资源,其他程序就不能被其他程序抢占。这是一种锁机制。
锁会降低性能。
3、预处理
高并发的关键在于这个请求在短时间内能不能响应。把大量的数据放在内存中,访问速度就可以极快,这时候就不叫buffer,叫cache。 在高并发的解决办法里,预处理是非常重要的解决办法,而预处理往往使用cache,缓存使用,key-vlaue结构,快速定位,比如Redis。
如果数据压力很大&#x