Tensorflow 的 QueueBase.enqueue_many 是否保持跨线程的顺序?
Does Tensorflow's QueueBase.enqueue_many preserve order across threads?
假设两个线程同时尝试将 N 个张量放入 FIFOQueue 的实例中。即,他们正在调用
queue_instance.enqueue_many(T)
其中 T
是长度为 N
的张量列表。
让我们将第一个线程中的每个张量标记为 T1_1
到 T1_N
,并将第二个线程中的每个张量标记为 T2_1
到 T2_N
。一切都说完了(对 enqueue_many
的两次调用都已完成),订单会保留吗?即,队列是否包含 [T1_1, ..., T1_N, T2_1, ..., T2_N]
或 [T2_1, ..., T2_N, T1_1, ..., T1_N]
?或者张量可以以交错方式排队,即 [T2_1, T2_2, T1_1, T2_3, T1_2, ...]
?或者,我想,第三种选择是没有任何韵律或理由:张量以任意顺序排队。
保留每个线程排队的批次中的顺序。另一种表达方式是 FIFOQueue.enqueue_many()
相对于同一队列上的其他入队操作以原子方式*执行。
* 但是,如果队列的剩余容量小于正在排队的批次的大小,则可以在排队完成之前从批次中 出队 元素 — IE。您可以将比队列容量 大 的批次入队,并且入队操作将阻塞,直到有足够的元素出队。
假设两个线程同时尝试将 N 个张量放入 FIFOQueue 的实例中。即,他们正在调用
queue_instance.enqueue_many(T)
其中 T
是长度为 N
的张量列表。
让我们将第一个线程中的每个张量标记为 T1_1
到 T1_N
,并将第二个线程中的每个张量标记为 T2_1
到 T2_N
。一切都说完了(对 enqueue_many
的两次调用都已完成),订单会保留吗?即,队列是否包含 [T1_1, ..., T1_N, T2_1, ..., T2_N]
或 [T2_1, ..., T2_N, T1_1, ..., T1_N]
?或者张量可以以交错方式排队,即 [T2_1, T2_2, T1_1, T2_3, T1_2, ...]
?或者,我想,第三种选择是没有任何韵律或理由:张量以任意顺序排队。
保留每个线程排队的批次中的顺序。另一种表达方式是 FIFOQueue.enqueue_many()
相对于同一队列上的其他入队操作以原子方式*执行。
* 但是,如果队列的剩余容量小于正在排队的批次的大小,则可以在排队完成之前从批次中 出队 元素 — IE。您可以将比队列容量 大 的批次入队,并且入队操作将阻塞,直到有足够的元素出队。