Parallele Programmierung (3IB)
Exchanger<T>
BlockingQueue<T>
Exchanger
-KlasseExchanger
: Synchroner AustauschBlockingQueue
Queue
-Interfaces1BlockingQueue<E>
mit Exception | nicht blockierend | blockierend | Timeout | |
---|---|---|---|---|
einfügen | add(e) |
offer(e) |
put(e) |
offer(e, time, unit) |
auslesen | remove() |
poll() |
take() |
poll(time, unit) |
prüfen | element() |
peek() |
nicht definiert | nicht definiert |
Hettel und Tran (2016, 145 (modifiziert))
offer()
/poll()
)put()
/take()
)Hettel und Tran (2016, 146)
sequentielle Verarbeitung:
Parallelisierung:
Skalierung:
Optimierung:
Go-Syntax nicht prüfungsrelevant
c <- a
a
(oder anderem Ausdruck) als Nachricht über Kanal c
a <- c
c
empfangen und Variable a
zuweisen (man kann auch (<- c)
als Ausdruck verwenden)go fun(...)
fun(...)
for
-Schleife
default
: falls keine Nachricht an den anderen Kanälen anliegtpackage main
var
1 quit chan bool
func f() {
// ... B
3 quit <- true
}
func main() {
2 quit = make (chan bool)
// ... A
go f() // fork B
// ... C
4 <-quit // wait B
// ... D
}
quit
für Elemente vom Typ bool
quit
für Elemente vom Typ bool
mit make
make (chan T, kapa)
erzeugt Kanal für Typ T
mit Kapazität kapa
(int
)
true
in quit
schreibenkapa
des Kanals ist hier 0)
quit
lesen, blockiert bis Wert verfügbar
A; (B | C); D
pp.10.01.Rendezvous
pp.10.02-Logger