# Communicatiekanaal

Een communicatiekanaal in de zin van het gedistribueerd programmeren is een verbinding tussen processoren waarover data gecommuniceerd worden tussen de verbonden processoren.
Communicatiekanalen worden in twee betekenissen gebruikt in het ontwerp van gedistribueerde systemen:
* Als model van communicatie in een berekening
* Als fysiek kanaal tussen twee (of meer) processoren

## Kanalen als berekeningsmodel

Een communicatiekanaal in de zin van een berekeningsmodel is niet een fysiek kanaal maar een voorstelling van de manier waarop programma's samenwerken. Een kanaal in deze zin wordt gebruikt om het ontwerp van een programma vorm te geven rond bepaalde communicatie-regels (het communicatie-protocol) zoals die gelden tijdens de looptijd van het programma.
Het kanaal is een model van communicatie dat zich onderscheidt van de gedeelde variabele. Bij het ontwerpen van gedistribueerde programma's worden kanalen vaak gebruikt om een vorm van communicatie te modelleren waarbij de ontwerper van het programma niet direct verantwoordelijk is voor de synchronisatie van de communicatie – hetzij omdat er een fysiek kanaal wordt gebruikt, hetzij omdat de synchronisatie van de eigenlijke communicatie om het programma van de ontwerper heen gebeurt. Kanalen modelleren een vorm van communicatie waarbij het de ontwerper van het programma niets kan schelen wat er in het kanaal gebeurt – hij stopt er een waarde in of probeert er een waarde uit te halen en het verdere mechanisme van het kanaal is zijn zorg niet. De regels aangaande de werking van het kanaal zorgen verder automatisch voor de synchronisatie binnen het kanaal en de manier waarop de ontwerper van het programma de kanalen gebruikt kan die synchronisatie uitbreiden tot de rest van zijn programma.
Merk op dat een gemodelleerd kanaal niet noodzakelijk als fysiek kanaal geïmplementeerd hoeft te worden. Een implementatie in de vorm van gedeelde variabelen kan ook, zolang de eigenlijke implementatie maar de regels van het gemodelleerde kanaal eerbiedigt.

## Fysieke kanalen

Ook in fysieke zin wordt van kanalen gebruikgemaakt. Met de opkomst van het gedistribueerd programmeren is ook het gebruik van netwerken van processoren om een berekening uit te voeren populair geworden. Opstellingen van processoren in een grid – een taurus van processoren, een ring, of processoren samen in een supercomputer-opstelling – of in een weidsere vorm van netwerk – het Internet of andere vormen van grid computing – maken gebruik van kanalen (netwerkverbindingen, bussen, etc.) om data van de ene processor naar de andere te transporteren.
De precieze vorm van een dergelijk netwerk kan van invloed zijn op de efficiëntie van een dergelijke berekening. Een vaak voorkomende optimalisatie van een gedistribueerd programma dat op een vast grid uitgevoerd zal worden, is die die gebruikmaakt van de vorm van het grid om een optimale doorvoersnelheid te behalen. Voor programma's op een wisselend grid als het internet is het daarentegen vaak zaak om de berekening te wapenen tegen het plotseling wegvallen van een deel van het grid.

## Kenmerken van kanalen

Kanalen zijn er (zowel als model als in fysieke zin) in verschillende vormen al naargelang hun toepassing.
In principe kan een grid een datum van de ene kant naar de andere kant vervoeren. Speciale vormen van een dergelijk kanaal die vaker toegepast worden, zijn:
* Eenrichtingskanalen, waarbij de communicatie maar een kant op kan verlopen
* Blokkerende kanalen, waarbij het gebruikende programma geblokkeerd wordt als het niet direct een waarde in het kanaal kan sturen of eruit kan lezen wanneer het dat probeert te doen
* Asynchrone kanalen, waarbij de zender van een bericht niet hoeft te wachten totdat het bericht ontvangen is alvorens verder te mogen gaan
* Gebufferde kanalen, waarlangs meerdere berichten tegelijkertijd onderweg kunnen zijn