Wpis z mikrobloga

@teddybear69: Tak - 100% zgody, race conditiony eliminujemy faktem że w ekosystemie jedno zadanie może być wykonywane tylko przez jeden komponent, tak samo z modyfikacją stanów.

Miałem w robocie rok temu krucjatę właśnie z tego powodu że jeden ziomek chciał asynciem pożenić stanowy system i jak mu rozrysowałem wszystkie potencjalnie race conditiony i tak wyglądała by komuniakcja async eliminująca race conditiony to sam zrezygnował.

Ostatecznie 3 mikroserwisy zmergowaliśmy w jeden
  • Odpowiedz
ale nieumiejętnie użyty może doprowadzić do race conditions


@teddybear69: Nieumiejętnie? To jest mało powiedziane, nie wiem co trzeba o---------ć aby w async/await doprowadzić do wyścigu xD Ale może to moja perspektywa z C# gdzie async/await jest zrobione tak jak jest + IDE zawsze czuwa aby podpowiedzieć czy ktoś aby awaita nie zapomniał.

A jak zobaczysz że ktoś robi async voida to po prostu dusisz go paskiem od spodni ¯\_(ツ)_/¯ Pomijając
  • Odpowiedz
@memory: To jeszcze zależy jak używasz tego foreacha i czy dbasz o to aby nie zrównoleglać rzeczy które nie powinny się dziać równolegle. Jak chcesz wielowątkowo opierdzielić operacje które nie nadają się do przetworzenia wielowątkowo to nie dość że faktycznie narobisz sobie potencjalnie jakichś wyścigów, to jeszcze może się okazać że jak już poprawisz te wyścigi przez nasranie np. semaforów to wykona się to o wiele wolniej niż tępa jednowątkowa
  • Odpowiedz
@teddybear69: No właśnie rozróżniłem te dwa pojęcia przecież. To że używasz async/await nie oznacza automatycznie że kilka rzeczy dzieje się równolegle, tylko że operacja nie blokuje wątku który ją wywołuje. Żeby osiągnąć wielowątkowość to trzeba już trochę zakombinować, bo zwykłe wywołanie i awaitowanie funkcji asynchronicznej to wciąż program który idzie w praktyce +/- synchronicznie, tylko bardziej "responsywnie".

Jeśli mam być szczery to nie wiem co to zmienia w aplikacjach webowych
  • Odpowiedz
@Khaine: skupiłeś się na async w kontekście jednej aplikacji, a problemy się potrafią pojawić gdy wciskasz async na rozproszoną architekturę i na przykład, przez przypadek, puścisz coś na kolejkę szybciej niż zapis do storage, a consumer jest szybszy ( ͡° ͜ʖ ͡°)
  • Odpowiedz