Wpis z mikrobloga

DevOpsi podmienili serwery na CI na tak wolne, że w testach wyszły jakieś race condition które myślałem, że są w ogóle niemożliwe. W sumie spoko sposób na testowanie wielowątkowego softu.

#programowanie
  • 5
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

  • 1
@Saly: No są, ale żadne narzędzie nie wykryje Ci większości rzeczy. Np. odpalam dwa wątki w jednym teście i na większości systemów oba lecą równolegle. Jeden z krótszą logiką czekał 10 ms na wiadomość z tego drugiego który miał więcej kodu. Na CI jest tylko jeden wątek dostępny i czasami systemowy scheduler wykonywał ten drugi w pierwszej kolejności a zanim wrócił do pierwszego to system miał tyle roboty z innymi
  • Odpowiedz
@TheDziobaker: w C/C++/Rust i Go istnieje coś takiego jak thread sanitizer, który wzbogaca kod w intrumentyzację sprawdzającą data race. Działa to bardzo dobrze, bo nawet jak race fizycznie nie występuje na twojej architekturze to i tak wszystko musi się zgadzać z memory modelem ustalonym dla języka.

Oczywiście na race conditiony bez data raceów to nie działa, bo to błąd logiczny.
  • Odpowiedz
  • 0
@Saly: No jest, ale jak wspomniałeś to wykrywa tylko na danych a takie przypadki to z odrobiną doświadczenia już się ogarnia intuicyjnie. Trudniej się robi jak masz np. w Go więcej niż dwie gorutynki które pracują na tych samych channelach i chciałbyś móc je ładnie zamknąć ale tego nauczyłem się już unikać.
  • Odpowiedz
@TheDziobaker: Jeśli aplikacja używa sieci w jakikolwiek sposób, to polecam raz na jakiś czas ustawić spowolnienie sieci do wartości np. ISDN. Często dodatkowe kwiatki wychodzą :)
  • Odpowiedz