Säikeitä..

mies..

Nyt kun nämä moniydin prossut alkaa yleistyä, niin on alkanut kiinnostamaan säikeistyksen käyttö enemmälti koodailessa.

Sen verran olen saannut selville, että säije (thread) on simppeli eriävä osa pääohjelmaa, jolla on pääsy pääohjelman muistiin. Prosessit ovat taas ns "pääsäikeitä" eli ohjelmia, prosessit eivät voi osoittaa toisien prosessien & säikeiden muistiin. Myös prosessien käynnistys on hitaampaa kuin säikeiten.

Kuvittelin kummiskin, että säikeet ovat kokonaan omia pikkuohjelmia pääohjelmassa, jotka eivät jumiudu jos pääohjelma menee lukkoon. Sikäli vähän oudoksuttaa, että jos pääohjelmassa tekee ikuisen while-silmukan, myös siinä käynnistetyt säikeet menee lukkoon, samoin säikeille pitää jakaa prosessi aikaa, että ne toimii. Onko tämä pelkästään Windowsin ominaisuus vai onko näin kaikissa käyttiksissä?

Noh, tämä on tämmöistä pohdintaa...

8

764

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • käsittely helppoa

      "Prosessit ovat taas ns "pääsäikeitä" eli ohjelmia, "
      Prosessi ei ole säie (edes "lainausmerkeissä"). Prosessi sisältää säikeet. Jokaisella prosessilla on ainakin yksi säie.

      "prosessit eivät voi osoittaa toisien prosessien & säikeiden muistiin"
      Kyllä Linuxissa ainakin on mahdollisuus muistialueen jakamiseen erillisten prosessien (ja säikeiden) kesken (osa System V IPC:tä, kannattaa tutustua).

      "Myös prosessien käynnistys on hitaampaa kuin säikeiten. "
      Windowsissa prosessien käynnistys on HI-DAS-TA. Linuxissa prosessit ja säikeet käynnistyvät molemmat nopeasti, tietty säikeet vielä prosessejakin nopeammin (ero ei kuitenkaan kovin suuri).

      "Kuvittelin kummiskin, että säikeet ovat kokonaan omia pikkuohjelmia pääohjelmassa"
      Yksinkertaistetusti kyllä, säikeet ovat "pikkuohjelmia" prosessissa.

      "jotka eivät jumiudu jos pääohjelma menee lukkoon."
      Jos pääohjelma menee "lukkoon" niin säikeet jatkavat. Säikeet menevät usein lukkoon (ns. deadlock) jos ohjelmaa ei ole suunniteltu riittävällä antaumuksella ja käytetään yhteisiä resursseja synkronoidusti.

      Javassa on säikeiden käyttö pitkältä automatisoitu. Kannattaa tsekata jos asia kiinnostaa. C/C :llä ehkä hankalampi toteuttaa jos kerta haluat käyttää Windowsiasi.

      • ap..

        Arvelinkin, että Linuxeissa ym. homma on paremmin toteutettu. Itse omistan OSX Leopardin, mut en ole kerennyt vielä kokeilemaan sen ihmeyksiä :(

        Suurin osa ajastani koodailussa menee kummiskin Windowssin kanssa touhuillessa, työn puolesta :(

        Mutta kiitti selvennyksistä :)


      • että...
        ap.. kirjoitti:

        Arvelinkin, että Linuxeissa ym. homma on paremmin toteutettu. Itse omistan OSX Leopardin, mut en ole kerennyt vielä kokeilemaan sen ihmeyksiä :(

        Suurin osa ajastani koodailussa menee kummiskin Windowssin kanssa touhuillessa, työn puolesta :(

        Mutta kiitti selvennyksistä :)

        OS X:llä homma onnistuu myös sujuvasti.
        Java on tohon hommaan muuten tosi sopiva mutta JVM ei pysty hyödyntämään useasta prosessorista saatua rinnakkaisuutta aidosti hyväkseen.


      • TRRY

        Jos tehdään softaa vain Linuxille unohtaen muut POSIX-standardeja seurailevat käyttöjärjestelmät, "tavallisen säikeen" ja "tavallisen prosessin" väliin mahtuu melkoinen sateenkaari kaikenlaisia otuksia.

        Näitä otuksia saa aikaan clone-funktiolla. Sen parametreilla voi valita, mitä kaikkea yhteistä syntyneillä otuksilla on alkuperäisen prosessin kanssa. Esimerkiksi jaetaanko muisti, avoimet tiedostot, signaalit yms.


    • -___-
    • koodari

      menepä

      www.turboexplorer.com ja lataa itsellesi Turbo Delphi.

      Turbo Delphissä luot uuden säikeen näin:

      type

      TOmaSaie1 = class(TThread)

      A : Integer;

      S : String;

      procedure Execute; override;

      end;

      procedure TOmaSaie1.Execute;
      begin
      // oman säikeesi koodi tulee tähän.

      // HUOM: säiehallinta kutsuu tätä vain kerran!

      // Tarvittaessa voit laittaa tähän vaikka while -silmukan, jos haluat suorittaa jotain useita kertoja.

      end;


      ja itse säikeen luominen (pääsäikeestä käsin):

      var
      OmaSaie : TOmaSaie1;

      procedure LuoSaie;
      begin
      //
      OmaSaie := TOmaSaie1.Create(true);

      // parametrilla false säie käynnistyisi heti, mutta true on turvallisempi vaihtoehto, jos esim säieobjektin jäsenmuuttujia halutaan alustaa.

      // Tässä voit alustaa omasaie -datakenttiä.

      // esimerkiksi:

      OmaSaie.A := 123456789;

      OmaSaie.S := 'tämä on säieobjektin jäsenmuuttuja.';

      // säie on nyt olemssa, mutta ns. "nukutustilassa" eli sen suoritus ei vielä etene.

      // Lopulta käynnistetään säie:

      OmaSaie.Resume;

      // NYT omasaie -säikeen Execute -metodia kutsutaan (eri säikeessä) samaan aikaan kun pääohjelma etenee.


      end;

      ja LuoSaie -proseduuria kutsut esim Button1 -tapahtumakäsittelijästä (event handler) näin:

      procedure TForm1.Button1Click(Sender:TObject);
      begin
      Button1.Enabled := False; // estää napin painamisen toistamiseen, jottet luo vahingossa useita uusia säikeitä!

      LuoSaie;
      end;

      tuon "TForm1.Button1Click" Delphi luo automaattisesti, kun pudotat lomakkeelle (Form) painonapin (Button1) ja tuplaklikkaat painonappia lomake-editorissa.

      Jos tarvitset uuden säikeen ja pääsäikeen välille kommunikointia, tutustu myös näihin:

      TStringlist

      TCriticalsection

      TList

      TThreadlist

      voit kirjoittaa editoriin jonkin noista ja painaa Ctrl-F1.

      Delphi on ainutlaatuinen ohjelmointiväline jossa yhdistyvät selkeys ja helppous kuten visualBasicissa, mutta myös koodin nopeus ja tehokkuus ja ominaisuuksien monipuolisuus kuten C :ssa.

      Miksi tyytyä VB:n rajoittuneisuuteen tai miksi sietää C :n sotkuista ja hankalaa syntaksia?

      Delphi yhdistää C :n ja VB:n hyvät puolet, huonoja on hyvin vähän ja osaavan ohjelmoijan on nekin vähät mahdollista kiertää, tavalla tai toisella.

      Turbo Delphi on sitäpaitsi ilmainen. Delphistä on myös maksulliset Professional ja Enterprise vaativampaan käyttöön.

    • Win OS

      Windowsissa prosessit ja säikeet selitetään näin.

      Ohjelma on muuttumaton joukko käskyjä. Prosessi on joukko tietokoneen resursseja, jotka on varattu säikeelle tai säikeille ohjelman ajamiseksi. Säie on prosessin osa, jolle Windows antaa ajo-oikeuden. Ilman säiettä prosessia ei voi ajaa.

      Yleisellä tasolla prosessi koostuu seuraavasti.
      Ajettava ohjelma ( esim .exe), joka määrittelee aloituskoodin ja -tiedot.
      Oma, yksityinen muistiavaruus.
      Järjestelmäresursseja, kuten semafooreja, tietoliikenneportteja ja tiedostoja, jotka windows kiinnittää prosessin käyttöön, kun säikeet avaavat ne ojelman ajon aikana.
      Oma, yksityinen prosessin tunnus.
      Ainakin yksi ajettava säie.

      Säikeen keskeiset osat ovat.
      Joukko muutuvia rekisteriarvoja, jotka kuvaavat suorittimen tilaa.
      Kaksi pinoa. Toinen suojattua tilaa (kernel mode) ja toinen käyttäjätilaa (user mode) varten.
      Oma, yksityinen muistialue alijärjestelmien ja kirjastorutiinien käyttöön.
      Oma, yksityinen säikeen tunnus.

      Säikeen kontekstin muodostavat muuttuvat rekisterit, pinot ja yksityinen muistialue. Kontekstit ovat laitekohtaisia, koska niiden rakenne vaihtelee laitearkkitehtuurista riippuen.

    • 1 prosessi 1 ydin

      Aikanaan XP:lle ohjelmoidessani kävi ilmi, että yhden prosessin säikeet käyttävät samaa ydintä ts kun yksi säie kuormittaa cpu:n ytimen 100%, muut säikeet pysähtyvät.

      Sittemmin siirryin Linux-puolelle, missä eri säikeet voivat pyöriä eri ytimillä. Ehkä uudemmat Windowsit osaavat käyttää eri säikeille eri ytimiä - tai sitten ei...

    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Sannalla tänään vuorossa The Daily Show

      Eli nyt mennään jo satiirin puolelle. Tuohan on vähän kuten Lindströmin ohjelma Suomessa.
      Maailman menoa
      56
      7835
    2. Tanskassa lain vaatimana Bovaer tappanut nautoja ja sairastuttanut

      Samaa myrkkyä myös Suomen lehmiin ollut tuloillaan, miten teidän tilalla? https://www.agriland.ie/farming-news/bovaer-m
      Maailman menoa
      67
      5921
    3. Ruotsalaisuuden Päivän virallinen liputuspäivä poistettava VÄLITTÖMÄSTI!

      Suomen valtion ja suomalaisuuden kannalta ei ole minkäänlaisia perusteita liputtaa virallisesti ruotsalaisuuden päivää,
      Maailman menoa
      63
      5405
    4. Täysi ryöpytys Sanna Marinille ulkomailla.

      https://www.iltalehti.fi/ulkomaat/a/f699d84f-fa53-4dba-8718-2c395017fc55 Sanna Marinin kirja saa todella tylyn vastaanot
      Maailman menoa
      51
      5313
    5. Minja Koskelan "istumista" kertovassa uutisessa ei sanottu persuista mitään

      eli jälleen kerran äärivasemmistolainen valehtelee, hän kun väittää että juuri persut ovat lähetelleet Koskelalle vähemm
      Maailman menoa
      108
      4642
    6. Pekka Visuri: "Suomen on aika irrottautua Ukrainan sodasta"

      Slava Ukraina-mölinät eivät enää auta. Ukraina on sotansa hävinnyt. Nyt tarvitaan poliittista selvänäköisyyttä, reaalipo
      Maailman menoa
      108
      2349
    7. Ei välimatka meitä erottanut

      Vaan välirikko ja väärinymmärrykset. Oikeastaan henkinen välimatka on meidän välillä pieni, näin uskon. Näen koko ajan e
      Ikävä
      4
      1241
    8. Maajussi-Villen morsioehdokas Maarit ei halunnut Villeä - Tämä totuus valkeni kuvauksissa!

      Ohhoh, tekikö Maarit mielestäsi oikean ratkaisun Villen suhteen? Maajussi-Ville on herättänyt voimakkaita tunteita puol
      Maajussille morsian
      4
      1195
    9. Kohta taas mesikämmeneen

      Onneksi kaupunki ostaa mesikämmenen, niin päästään taas tekemään rahaa
      Ähtäri
      37
      1036
    10. Olin ihan varma että sä olet se oikea

      Tunteet kuitenkin kuoli käyttäytymisesi johdosta. Hyvin tehty jos oli tarkoituskin. Oppia ikä kaikki ja jotkut ei opi ko
      Ikävä
      47
      1022
    Aihe