Hirdetés

Keresés

Új hozzászólás Aktív témák

  • loszerafin
    senior tag

    Ha jól értem a JVM-ek működését az olvasmányaim alapján, akkor nincs garantálva, hogy időosztásosan működjenek a JVM-ek. Azaz, ha azt akarom, hogy a többi szál is labdába rúghasson, kell sleep()-et tennem a hosszan futó ciklusaimba.

    Igazából a yield() metódust találták ki megoldásként erre problémára, de sajnos
    kínszenvedés a használata mert nagyon nem egyértelmű mikor kell meghívni.
    (Valami olyasmit lehet elképzelni, hogy pörgetsz egy számlálót a ciklusodban és
    minden 10-edik futáskor meghívod a yield()-et vagy valami hasonló)

    Szerencsére azonban ez a probléma a ''való életben'' elég ritkán fordul elő,
    hisz az ember általában olyan szálakat ír amelyek egyébként is blokkolnak.
    Pl. mert egy socket-ről akarsz olvasni vagy vársz egy beérkező üzenetre... stb.


    Igazából a yield() metódust találták ki megoldásként erre problémára, de sajnos
    kínszenvedés a használata


    Köszönöm, igaz, megnéztem még 1x. Azt írja a könyv, hogy a yield() átteszi a jelenleg futó szál állapotát runnable-be, ezáltal a scheduler választhat egy új szálat, amit futtatni fog.
    Azonban nincs előírva, hogy a scheduler másik szálat válasszon, ezért lehet, hogy ugyanazt fogja futtatni, azaz előfordulhat, hogy a yield() tulajdonképpen nem csinált semmit.

    Kicsit meg lehet spékelni az egészet a szálak prioritásával, de mivel a prioritást meg nem kötelező megvalósítania a JVM-eknek, kár a gőzért...

Új hozzászólás Aktív témák