Path: csiph.com!weretis.net!feeder4.news.weretis.net!news.unit0.net!news.nask.pl!news.nask.org.pl!newsfeed2.atman.pl!newsfeed.atman.pl!.POSTED!not-for-mail From: Roman Tyczka Newsgroups: pl.comp.lang.javascript Subject: Re: Promise i oczekiwanie na wynik Date: Fri, 10 Aug 2018 18:19:58 +0200 Organization: ATMAN - ATM S.A. Lines: 47 Sender: romek@tyczka.no.found Message-ID: <3gdptg2lfrnd.dlg@tyczka.com> References: <1jv3988qj6pyf.dlg@tyczka.com> <1x6oxswxeel0t$.dlg@tyczka.com> <19s5kvtfto3zr.bj8wdjlcy4l2.dlg@40tude.net> NNTP-Posting-Host: ip-94-75-90-137.wave.com.pl Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit X-Trace: node1.news.atman.pl 1533917998 17343 94.75.90.137 (10 Aug 2018 16:19:58 GMT) X-Complaints-To: usenet@atman.pl NNTP-Posting-Date: Fri, 10 Aug 2018 16:19:58 +0000 (UTC) User-Agent: 40tude_Dialog/2.0.15.84 Xref: csiph.com pl.comp.lang.javascript:3494 On Fri, 10 Aug 2018 17:22:02 +0300, Cezary Tomczyk wrote: > On 10/08/2018 12:53, Borys Pogoreło wrote: >> Dnia Wed, 8 Aug 2018 23:34:09 +0200, Roman Tyczka napisał(a): > [...] >>> ps. dlaczego w ogóle ten moduł crypto wsadzili w Promise? Z powodu >>> złożoności obliczeniowej i realnie długiego czasu wykonania? >> >> Tak. Wszelkie operacje synchroniczne blokują event loop. > > Garść o tym: > https://medium.com/@siddharthac6/javascript-execution-of-synchronous-and-asynchronous-codes-40f3a199e687 To nie wyjaśnia wszystkiego, bo użyty został fatalny przykład z tym setTimeout(). Czekanie 2 sekundy nic nie kosztuje. I jest łatwe do implementacji tak jak to opisano. Ale co z sytuacją, gdy funkcja asynchroniczna robi coś "grubego" w tle, jak choćby to liczenie hasza? Czy wtedy: a) jest oczekiwanie na pustego call stacka i wrzucenie całego "grubego" zadania do wykonania (tak wynika z artykułu)? b) czy może to poboczne zadanie jest dzielone na fragmenciki i wywoływane po kawałku w wolnych chwilach (tak jak w aplikacjach z prawdziwą wielowątkowościa)? Druga opcja ma większy sens, ale jest dużo trudniejsza w implementacji. Zatem nadal nie wiem czy wiem co się tam tak naprawdę dzieje :-) Zwłaszcza, że autor arta sam pisze na końcu: "I don’t know how accurately I am able to demonstrate this topic but there are a lot in between that could have been elaborated or explained better, but am in a rush and it’s already too long already. Hope it helps someone." ps. W Delphi (jeśli mowa o programowaniu bez wątków) też istnieje coś takiego jak timer i też można mu zapodać zrobienie czegoś za określony czas i działa to tak jak opisano w tym artykule, czyli pętla komunikatów dostaje komunikat WM_TIMER i adres procedury obsługi, którą wywołuje jeśli nie jest akurat niczym zajęta. To dość uboga "asynchroniczność", ale czasami wystarcza. Gdyby jednak procedura spod timera była długotrwała to pętla komunikatów zostanie zablokowana i aplikacja przestanie odpowiadać (często to widać w źle napisanych aplikacjach, gdy GUI przestaje się rysować i nie działają kontrolki). -- pozdrawiam Roman Tyczka