Zgodovina

  • C: fokus na izkoriščanju malo virov; slabša sintaksa in kompleksnost
  • C++, C# in Java: večnitno programiranje in čiščenje pomnilnika
  • Python in Javascript: skupnost in veliko paketov; ni prevajan manjša zmogljivost
  • Go:
    • prevajan zmogljiv
    • vgrajena podpora vzporedenja
    • statična tipizacija z izpeljavo tipov
    • errors-as-values
    • vzporedno delujoč garbage collection
    • ni objekten, a podpira vmesnike
    • večplatformen

Sočasnost

Model Communicating Sequential Processes oz. model opravilo-kanal:

  • gorutine (=naloge): enostavne neodvisne sekvenčne funkcije z vhodom in izhodom,ki jih lahko izvajamo sočasno
  • kanali: komunikacija in/ali sinhronizacija gorutin; blokirajoči - gorutine čakajo na sporočilo

Gorutine

Vedno vsaj glavna gorutina, ki se zažene ob začetku izvajanja programa
Model razcepi-pridruži (fork-join):

Kanali

Enosmerni (samo branje ali samo pisanje) / dvosmerni (oboje)
Blokirajoči:

  • pisanje v poln kanal čakanje na izpraznenje kanala
  • branje iz praznega kanala čakanje na vrednost v kanalu

Velikost kanala:

  • privzeta velikost kanala 0 pisalna gorutina čaka, da je bralna gorutina pripravljena na sprejem
  • kanali z medpomnilnikom (velikost > 0) branje iz kanala po FIFO principu

Zapiranje kanalov: branje iz zaprtega kanala mogoče, ok zastavica postavljena na false
Sinhronizacija s kanali: s tipom kanala struct{} poudarimo, da se ne bo prenašalo vrednosti