Wpis z mikrobloga

Prosta i skuteczna metoda na odpalenie 10 000 razy funkcji - każde wywołanie wykonuje się 5 sekund
aby uzyskać wynik nie po 10 000*5s=50 000s tylko w mniej niż 500s?
odpalenie 1000 wątków?
do tego dochodzi zapis wyników z tej funkcji co pewnie jest trudniejsze do wykonania na wątkach

#programowanie #linux #java #perl #python
  • 18
  • Odpowiedz
@Hilarious: Kwestia dlaczego wywolanie trwa 5 sekund. Zrównoleglenie obliczeń w obrębie tego samego procesora moze nic nie dać jeżeli to same obliczenia.
  • Odpowiedz
@Cebulakx: najpierw sprofiluj co tam tyle trwa. Podział na wątki powinien zredukować czas wykonania całości do n-krotnie (n – ilość wątków, pod warunkiem że masz n wątków w procesorze). Jeśli tam są operacje IO (czas użytkownika mniejszy niż czas rzeczywisty wykonania), to nawet na jednym wątku asynchronicznie powinieneś odczuć przyspieszenie.
  • Odpowiedz
@Hilarious: @kywmn: @tell_me_more: @Razi91:
powiedzmy że jest to funkcja ping która wykonuje 2x komende ping
ping z timeoutem 2s pakietem 50b+ ping z timeoutem 3s pakietem 500b + może pomiędzy jakieś drobne dodatkowe operacje (nie piszcie nic o skryptach do skanowania typu fping itp itd - wszelkie narzędzia do pingowania hostów nie umożliwiają parametryzacji każdego poszczególnego pinga, nie da się w nich wykonać 'sekwencji
  • Odpowiedz
@Cebulakx: czyli w grę wchodzi IO, które jest nieobliczalne i nawet na jednym rdzeniu/wątku sprzętowym jest sens podział na wątki lub zrobienie tego asynchronicznie.
  • Odpowiedz
@Razi91: php popen działa asynchronicznie, odpalam tą 'funkcje' 1000x czekam kilka sekund i kolejne 1000x
działa w 90% przypadków ale w 10% się 'coś wiesza'
  • Odpowiedz
@lis6502 @Cebulakx nie miałem takich luksusów jak 200 maszyn po ssh ( ͡° ͜ʖ ͡°)

a mój use-case do parallel:
co jakiś czas mam do obrobienia dziesiątki/setki skanów na których jest po kilka zeskanowanych fotografii, do obróbki używam multicrop, odpalam multicropa parallelem na wszystkich plikach i wszystko jest gotowe po kilku godzinach
  • Odpowiedz
@afe1: Jeżeli operacje wykonywane przez @Cebulakx będą blokujące, to użycie Quasara i fibersów nic nie da. Pamiętaj że to nadal działa na JVM i nadal pod spodem korzysta z normalnej puli wątków (konkretniej: ForkJoinPool). Na podobnej zasadzie nie pomogłyby tutaj Akka Actors.

@Cebulakx: Kluczem do tego co chcesz osiągnąć jest non-blocking network call/socket/connection (pod tymi określeniami szukaj). W świecie JVM coś takiego osiągnąłbyś za pomocą SocketChannel, w
  • Odpowiedz