Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Peloton rinnakkaisuus

Rinnakkaisen ohjelmoinnin turvallinen ja tehokas käsittely on yksi Rustin tärkeimmistä tavoitteista. Rinnakkainen ohjelmointi, jossa ohjelman eri osat suoritetaan itsenäisesti, ja rinnakkaisohjelmointi, jossa ohjelman eri osat suoritetaan samanaikaisesti, ovat yhä tärkeämpiä, kun useammat tietokoneet hyödyntävät moniydinsuorittimiaan. Historiallisesti ohjelmointi näissä yhteyksissä on ollut vaikeaa ja virhealtista. Rust pyrkii muuttamaan tämän.

Aluksi Rustin kehitystiimi ajatteli, että muistin turvallisuuden varmistaminen ja rinnakkaisuusongelmien estäminen olivat kaksi erillistä haastetta, jotka pitäisi ratkaista eri menetelmillä. Ajan myötä tiimi havaitsi, että omistajuus- ja tyyppijärjestelmät ovat tehokkaita työkaluja sekä muistin turvallisuuden että rinnakkaisuusongelmien hallintaan! Hyödyntämällä omistajuutta ja tyyppitarkistuksia monet rinnakkaisuusvirheet Rustissa ovat kääntöaikaisia virheitä eivätkä ajonaikaisia virheitä.

Tämän ansiosta sinun ei tarvitse käyttää paljon aikaa ajonaikaisen rinnakkaisuusvirheen toistamiseen – virheellinen koodi ei yksinkertaisesti käänny ja antaa virheilmoituksen, joka selittää ongelman. Näin voit korjata koodisi jo kehitysvaiheessa, sen sijaan että joutuisit selvittämään ongelmia vasta tuotannossa. Olemme nimenneet tämän Rustin ominaisuuden pelottomaksi rinnakkaisuudeksi.

Peloton rinnakkaisuus mahdollistaa koodin kirjoittamisen ilman hienovaraisia virheitä ja tekee refaktoroinnista helpompaa ilman uusien virheiden syntymistä.

Huom: Yksinkertaisuuden vuoksi käytämme tässä luvussa termiä rinnakkainen tarkoittamaan sekä rinnakkaista että samanaikaista suorittamista. Mikäli tämä kirja käsittelisi erityisesti rinnakkaisuutta ja/tai samanaikaisuutta, käyttäisimme tarkempaa terminologiaa. Tässä luvussa voit mielessäsi korvata sanan rinnakkainen termillä rinnakkainen ja/tai samanaikainen.

Monet ohjelmointikielet tarjoavat vain tiettyjä ratkaisuja rinnakkaisuusongelmiin. Esimerkiksi Erlang tukee viestinvälitykseen perustuvaa rinnakkaisuutta, mutta tilan jakaminen säikeiden välillä on siinä monimutkaista. Korkean tason ohjelmointikielille on järkevää tarjota vain rajoitettu joukko ratkaisuja, koska ne hyödyntävät abstraktioita ja luopuvat osasta kontrollia helpottaakseen kehittämistä.

Matalamman tason ohjelmointikieliltä odotetaan kuitenkin parempaa suorituskykyä eri tilanteissa ja vähemmän abstraktioita laitteiston päällä. Siksi Rust tarjoaa joukon erilaisia työkaluja, joiden avulla voit valita parhaan ratkaisun omiin tarpeisiisi ja ohjelmointikontekstiisi.

Tässä luvussa käsittelemme seuraavia aiheita:

  • Kuinka luoda säikeitä suorittamaan useita koodin osia samanaikaisesti
  • Viestinvälitykseen perustuva rinnakkaisuus, jossa säikeet lähettävät viestejä toisilleen kanavien kautta
  • Jaetun tilan rinnakkaisuus, jossa useat säikeet voivat käyttää samaa tietoa
  • Sync- ja Send-traitit, jotka laajentavat Rustin rinnakkaisuustakuut koskemaan sekä standardikirjaston että käyttäjän itse määrittelemiä tyyppejä