首页 > 解决方案 > 是否有任何理由锁定队列?

问题描述

我只是想知道是否有任何理由我可能想要锁定队列。我正在开发一个应用程序,该应用程序具有多个读取和写入数据库的线程。为了减少流量,我想在任何给定点减少对该数据库的调用量(我知道许多数据库已经可以处理一些流量)。为读/写请求创建一个队列并且只执行顶部的请求然后用锁保护队列的推送和弹出命令是否有意义?对每个读/写调用进行锁定是否足够?无论如何,锁不是由操作系统实现为“队列”吗?这个“队列”的大小可能是一个问题,还是有任何其他原因我不会单独使用锁?谢谢!

标签: multithreadingqueuelocking

解决方案


您可以限制参与数据库请求的线程数,或者如果由于您的应用程序的性质而这不可行,您可以使用更精细的方法来限制对共享资源的访问。在python中,您可以使用内置的信号量对象进行线程间同步。对于进程间同步(或线程间),您将使用posix_ipc。这取决于您的服务的执行模型是什么。

大多数数据库客户端不需要任何应用程序级别的限制。在典型的系统中,数据库连接将被合并,连接管理器将负责获取可用连接。在内部,这通常涉及某种带有超时的队列,以防止无限期地等待。然后,数据库本身将处理每个连接进行的各个操作的调度。

但是,信号量是一种信号原语,可用于限制并发操作的数量:https ://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Semaphore.html

任务也可以建模为涉及共享队列的生产者-消费者问题,但是除了生产者之外,您还必须处理管理消费者线程的额外复杂性。


推荐阅读