K čemu JavaScript generátory?

Re:K čemu JavaScript generátory?
« Odpověď #30 kdy: 14. 08. 2015, 11:34:40 »
aby som prispel troškou bordelu, aj ajax sa dá spraviť synchrónne, čiže už to vlastne ani nie je ajax, ale sjax :)


Ivoszz

Re:K čemu JavaScript generátory?
« Odpověď #31 kdy: 14. 08. 2015, 11:37:19 »
Tyhle diskuse mne docela baví... :D

Jak už jsem psal někde v počátcích, problém je v definicích a zjednodušování, proto jsem přihodil definici toho, co myslím asynchronností já. A pak tu člověk čte javascript, ale myslí se jen browser, napíše se že veškerý JS běží v jednom vláknu, ale nedodá se že knihovny a IO operace už v tom samém vláknu neběží, a to nemluvím o webworkerech, atd. atd. Když napíšu že na konkurenčním modelu nezáleží, protože je to implementační detail, tak se operuje paralelním během. A nejkomičtější jsou argumenty s pětimintovým čekáním, když v naprosté většině reálných testů a nasazení ten "strašně pomalý" javascript, kde se tak dlouho čeká na odpověď poráží v rychlosti své konkurenty (jako třeba Java) a hlavně má mnohem kratší reakční dobu na požadavek. Právě proto byl také nasazen na webové stránky a jeho asynchronnost (mimochodem, naprostá většina UI je asynchronní na bázi event loopu, aby byla rychlejší doba odezvy) byla jedna z primárních vlastností. A kvůli té "pomalosti" jsou pak do dalších jazyků zapracovávány asynchronní metody volání, vznikají asynchronní frameworky atd., jen proto abychom zpomalili běh programů.... :)

Mimochodem, ta jednovláknost javascriptu je jednou z jeho velkých výhod. Za prvé to zjednodušuje programování při přístupu ke sdíleným zdrojům, za druhé to umožňuje jednoduše a téměř lineárně škálovat výkon s relativně malou spotřebou systémových zdrojů.

k

Re:K čemu JavaScript generátory?
« Odpověď #32 kdy: 14. 08. 2015, 12:29:27 »
naprostá většina UI je asynchronní na bázi event loopu

S Vámi také končím, označit event loop asynchronní je již mimo moje chápání.

v

Re:K čemu JavaScript generátory?
« Odpověď #33 kdy: 14. 08. 2015, 13:36:38 »
naprostá většina UI je asynchronní na bázi event loopu

S Vámi také končím, označit event loop asynchronní je již mimo moje chápání.

žádný problém, vždyť nikdo nejsme vševědoucí, zkusím vám to vysvětlit na (trošičku vykonstruovaném) příkladu

uživatel klikne na tlačítko, systém zachytí přerušení (to je synchronní zpracování), ale nepodnikde žádnou akci vázanou na funkci tlačítka, ale zprávu uloží do fronty, aplikace kontroluje (v "event loop") jestli něco zmíněnou frontou nepřišlo, pokud ano, podnikne příslušné kroky, tedy pokud se jí to hodí a kdy se jí to hodí - asynchronně vzhledem ke vzniku události

Re:K čemu JavaScript generátory?
« Odpověď #34 kdy: 14. 08. 2015, 16:35:57 »
(a)synchronní, (ne)blokující, paralelní, konkurenční, preemptivní, ... vyzná se v tom ještě někdo?


JS

Re:K čemu JavaScript generátory?
« Odpověď #35 kdy: 14. 08. 2015, 17:36:44 »
(a)synchronní, (ne)blokující, paralelní, konkurenční, preemptivní, ... vyzná se v tom ještě někdo?

Vyzna:
(a)synchronní => udalost
(ne)blokující => volani
paralelní => hardware
konkurenční => software
preemptivní => planovac

Jsou to pribuzne koncepty, jen se kazdy vztahuje na neco jine.  ;)

k

Re:K čemu JavaScript generátory?
« Odpověď #36 kdy: 14. 08. 2015, 18:24:02 »

To jste do toho zamotal přerušení a zamotal jste i sebe :) Vyvolání obsluhy IRQ je asynchronní záležitost, fronta událostí je synchronní záležitost, event-loop též synchronní záležitost. Asynchronní obsluhu události od IRQ si můžete představit jako pohyb myši, zjevně se hybá i když event-loop zrovna dělá něco jiného.

JS

Re:K čemu JavaScript generátory?
« Odpověď #37 kdy: 14. 08. 2015, 19:04:53 »
To jste do toho zamotal přerušení a zamotal jste i sebe :)

Jediny, kdo se tady zamotava jste vy:

Citace
Vyvolání obsluhy IRQ je asynchronní záležitost

Urcite? Podle vasi analogie je to take synchronni, protoze vyvolani IRQ je rizene synchronnim hodinovym signalem procesoru...

Pointa je, ze asynchronost je urcita abstrakce reality, nikoli realita. Plynuti casu z hlediska aplikace muze vypadat jinak nez z hlediska operacniho systemu, asi podobne jako nahodny generator nemusi byt nutne realne nahodny (v deterministickem vesmiru se to treba zaridi tezko), staci nahodny z pohledu aplikace.

Makovec nereg

Re:K čemu JavaScript generátory?
« Odpověď #38 kdy: 14. 08. 2015, 19:05:06 »
Fronta událostí n. operací je (resp. může být pokud povoluje pouze seriání zpracování) sychronní vzhledem sama k sobě, ale nikoli vzhledem k provádění kódu který do ní události/operace vkládá.

v

Re:K čemu JavaScript generátory?
« Odpověď #39 kdy: 14. 08. 2015, 19:06:03 »
To jste do toho zamotal přerušení a zamotal jste i sebe :)
vy, abyste se nezamotal, námitky ignorujete - co je to ten současný běh funkcí?

Citace
Vyvolání obsluhy IRQ je asynchronní záležitost
přerušení je vyvoláno asnychronně - uživatel klikne kdy se rozhodne, ale kód ISR se provádí okamžitě, za přerušení provádění původního programu, jehož vykonávání pokračuje až to ISR s tím kliknutím dořeší

Citace
fronta událostí je synchronní záležitost
fronta události je datová struktura

Citace
event-loop též synchronní záležitost
"event loop" je konstrukce v programu pro zpracování asynchronně vznikajích událostí, události jsou vyhodnocovány až se program usmyslí, ne okamžitě kdy vzniknou

Citace
Asynchronní obsluhu události od IRQ si můžete představit jako pohyb myši, zjevně se hybá i když event-loop zrovna dělá něco jiného.
já jsem mluvil o kliknutí a aplikaci, ale pokud chcete naznačit, že různé události se mohou zpracovat různými postupy, tak asi máte pravdu

k

Re:K čemu JavaScript generátory?
« Odpověď #40 kdy: 14. 08. 2015, 20:26:17 »
vy, abyste se nezamotal, námitky ignorujete - co je to ten současný běh funkcí?

Přerušení do toho zamotalo ISR a tím se nám to zkomplikovalo :) Řeč byla o asynchronním vykonávání funkcí v rámci jedné aplikace. Současný běh funkcí logicky je že v jednom čase se vykonávají dvě funkce a nutný nikoliv postačující předpoklad k tomu je, že druhá funkce nečeká na dokončení první. Technicky se to nejčastěji realizuje pomocí vláken nebo procesů.

přerušení je vyvoláno asnychronně
"event loop" je konstrukce v programu pro zpracování asynchronně vznikajích událostí, události jsou vyhodnocovány až se program usmyslí, ne okamžitě kdy vzniknou
Citace

To se shodujeme :) ISR je asynchronní, vloží událost do fronty událostí a tím asynchronní obsluha události skončila.
Když má event-loop čas, tak vybere událost z fronty událostí a jednu po druhé synchronně zpracuje, v jeden čas se zpracovává pouze jedna událost.

já jsem mluvil o kliknutí a aplikaci, ale pokud chcete naznačit, že různé události se mohou zpracovat různými postupy, tak asi máte pravdu

Ano můžete si vybrat:
A) Událost od kliknutí na tlačítko myši vložit do fronty a událost se zpracuje synchronně vůči všem ostatním událostem.
B) Událost od pohybu myší obsloužit rovnou v ISR a pak se zpracuje asynchronně vůči všem ostatním událostem ve frontě.

v

Re:K čemu JavaScript generátory?
« Odpověď #41 kdy: 14. 08. 2015, 20:32:16 »
Současný běh funkcí logicky je že v jednom čase se vykonávají dvě funkce

teď fakt nevím, jestli žertujete

Radek Miček

Re:K čemu JavaScript generátory?
« Odpověď #42 kdy: 14. 08. 2015, 21:05:08 »
Současný běh funkcí logicky je že v jednom čase se vykonávají dvě funkce a nutný nikoliv postačující předpoklad k tomu je, že druhá funkce nečeká na dokončení první.

Není to nutný předpoklad - funkce se mohou střídat (tj. v jednom čase poběží pouze jedna) nebo se jedna z funkcí začne vykonávat až poté, co jiná skončí.

Re:K čemu JavaScript generátory?
« Odpověď #43 kdy: 14. 08. 2015, 21:23:43 »
(a)synchronní, (ne)blokující, paralelní, konkurenční, preemptivní, ... vyzná se v tom ještě někdo?

Vyzna:
(a)synchronní => udalost
(ne)blokující => volani
paralelní => hardware
konkurenční => software
preemptivní => planovac

Jsou to pribuzne koncepty, jen se kazdy vztahuje na neco jine.  ;)

Hmm, to by dávalo smysl.

Petr

Re:K čemu JavaScript generátory?
« Odpověď #44 kdy: 14. 08. 2015, 21:53:00 »
...
konkurenční => software
...

jen dotaz - já vždy používám výraz "konkurentní", je "konkurenční" v daném kontextu OK oboje?