2016-03-30 13 views
4

Angenommen, zwei Threads versuchen gleichzeitig, jeweils N Tensoren in eine Instanz einer FIFOQueue einzuordnen. Sie rufen beispielsweiseIst Tensorflow QueueBase.enqueue_many Reihenfolge über Threads beibehalten?

queue_instance.enqueue_many(T) an, wobei T eine Liste von Tensoren der Länge N ist.

Lassen Sie uns jeden Tensor vom ersten Thread als T1_1 bis T1_N und T2_1 bis T2_N für den zweiten Thread beschriften. Wenn alles gesagt und getan ist (beide Aufrufe an enqueue_many wurden abgeschlossen), wird die Reihenfolge beibehalten? Das heißt, enthält die Warteschlange entweder [T1_1, ..., T1_N, T2_1, ..., T2_N] oder [T2_1, ..., T2_N, T1_1, ..., T1_N]? Oder könnten die Tensoren verschachtelt eingereiht werden, d. H. [T2_1, T2_2, T1_1, T2_3, T1_2, ...]? Oder, ich nehme an, eine dritte Option ist, dass es überhaupt keinen Reim oder Grund gibt: Die Tensoren werden in einer willkürlichen Reihenfolge eingereiht.

Antwort

4

Die Reihenfolge innerhalb der durch jeden Thread eingereihten Batches bleibt erhalten. Eine andere Möglichkeit besteht darin, dass FIFOQueue.enqueue_many() atomisch * in Bezug auf andere Enqueue-Operationen in derselben Warteschlange ausgeführt wird.


*   Wenn jedoch die verbleibende Kapazität der Warteschlange weniger ist als die Größe der Charge die Warteschlange gestellt wird, ist es möglich, dequeue Elemente aus der Charge vor der Enqueue — vervollständigt das heißt Sie in der Lage sind Chargen einreihen, die größer als die Kapazität der Warteschlange sind, und der Enqueue-OP wird blockiert, bis genügend Elemente aus der Warteschlange entfernt wurden.

Verwandte Themen