Jak čekat na výsledky v Javascript

čumil

Re:Jak čekat na výsledky v Javascript
« Odpověď #15 kdy: 21. 11. 2015, 12:40:40 »
No no, opravdu nejsem kokot abych setTimeout dal všude na stejný čas, to by se mi všechno do event loopu nacpalo pěkně za sebou a žádný zisk (neblokování event loopu) bych neměl.

Popíšu vlastní aplikaci. Měl jsem primitivní AI využívající evolučního algoritmu. Bohužel, ten žere tunu prostředků a protože byl v JS aplikaci, opravdu jsem nechtěl aby to celí zamrzlo. Tak jsem zpracování jednotlivých generací strčil do handleru setTimeout, přičemž po každé generaci sem to zopakoval s pauzou pár milisekund, díky tomu se v event loopu stihli odbavit ostatní eventy a appka nezamrzla a AI běžela.

Oznámení že provádění callbacku setTimeout je synchronní mne přišlo skoro jako urážka, sem snad debil ? ? ? :D

No to je krása. Takže máme OS s preemptivním multitaskingem, ten naplánuje browser, browser vytvoří vlákno interpretující JS a v důsledku doběhnutí event queue se občas odloží vykonávání toho vlákna voláním pollu nebo něčeho podobného. Když máme ve frontě timer event, tak se vlákno z pollu zas někdy třeba probudí, spočítá se 1+1, do event queue se flákne další timer event s arbitrární hodnotou takovou, aby se nám to moc nepotkávalo s obsluhou kliknutí na debilní tlačítko a doufáme, že se příště spočítá 1+2.

To je přesně technologie, kterou bych nasadil na implementaci AI. Ale debil nejsi. Až to budeš přepisovat do céčka, doporučuju něco v tomhle smyslu:
Kód: [Vybrat]
for( ; ; ) {
  if (debil_kliknul_na_button()) {
    usekni_mu_ruku(1);
  }
  usleep(random());
  krutoprisne_spocitej_dalsi_generaci_debilu();
}

Pro dosažení vyššího levelu nirvany do sebe vnoř víc takovejch smyček, čím víc inception tim pomalejc totiž běží čas.
:D upřímně jsem se zasmál. Samozřejmě že máš pravdu, AI v prohlížeči je buď hodně trhlej přístup a nebo hodně zoufalej.

Ještě se nabízelo řešení pomocí workeru, ale to jsem bohužel díky debilitě API nemohl použít.