有没有理由锁定队列?

时间:2018-05-21 05:00:39

标签: multithreading queue locking

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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