Hlavní navigace

Názory k článku Erlang: procesy s využitím knihoven

Článek je starý, nové názory již nelze přidávat.

  • 6. 10. 2014 21:22

    M. Prýmek

    Teprve ted jsem zaznamenal, ze tady bezi serial o mem oblibenem Erlangu, predchozi dily mi nejak utekly :) A jeste ke vsemu je to i dobre napsany, super, diky moc!

    Jestli muzu drobny doplneni k tomu "posilani synchronnich/a­synchronnich" zprav, nekoho by mozna mohlo zajimat, ze posilani zprav v erlangu je vzdycky asynchronni a pokud je potreba synchronni zprava, tak se musi explicitne "rucne" synchronizovat - proces proste ceka na konkretni zpravu, ktera je odpovedi na otazku, kterou odeslal.

    Z toho pak plyne to, ze gen_server vlastne mezi doruceni zpravy a jeji zpracovani vklada jednu vrstvu navic, coz muze znemoznit nektery figle, ktery se jinak daji pouzit - napr. pokud proces ceka v receive na nejakou zpravu a dostane jinou, tak se nic nedeje - zprava zustane v mailboxu a ceka se dal, "neocekavana" zprava se zpracuje az pozdejc. Takze pri klasickem receive jde treba zpravy prioritizovat [1]. U gen_serveru tohle pouzit nejde, protoze ten proste prijme jakoukoli zpravu a preda ji ke zpracovani callback modulu. Vypada to jako prkotina, ale nektere veci to muze komplikovat a pokud vim, s gen_serverem se tohle moc neda resit. Na druhou stranu, gen_server (jako takovej, ten modul) neni zadny raketovy inzenyrstvi, takze si clovek muze dle libosti napsat vlastni verzi, klidne i se stejnym protokolem {'$cast' ...}.

    V zacatecnickem tutorialu by asi taky stalo za zminku, ze pomoci synchronnich volani se da snadno vytvorit deadlock - staci dva vzajemne se synchronne volajici moduly...

    Vzhledem k vzacnosti materialu o Erlangu v cestine je skoda, ze neprobehla trochu zevrubnejsi jazykova korektura, ta spousta chyb zbytecne jinak supr serial snizuje (treba to opakovani "modul co neco dela" - fakt by to chtelo spis "ktery" ;)

    Celkove ale clanek i celej serial fakt super, diky moc.

    [1] viz napr. http://erlang.org/pipermail/erlang-questions/2007-July/027728.html

  • 8. 10. 2014 11:57

    ztmr (neregistrovaný) ---.idea.cz

    S tim mailboxem je taky potreba si dat bacha, aby v nem ty zpravy nevyhnivaly. V anti-defenzivnim Erlangu je receive asi jedine misto, kde se naopak osetrovat nezname stavy (zpravy) musi. Tohle nektere zacatecniky mozna muze trosku prekvapit :-)

    Mimochodem, nedavno probehla tahle diskuse:
    https://github.com/erlang/otp/pull/481

  • 8. 10. 2014 18:28

    M. Prýmek

    Jasně, určitě. Když dělám nějaký selektivní receive, tak si musím dát bacha, abych někde vybral i ostatní zprávy. Akorát s tím gen_serverem prostě selektivní receive udělat nemůžui kdybych si toho rizika byl vědom a byl připravenej ho vychytat.