有什么理由锁定队列吗?



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

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

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

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

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

最新更新