Spędziłem 3 dni debugując jeden bardzo niejasny błąd w bibliotece stworzonej przez mojego kolegę, ten błąd zdarza się bardzo rzadko. W końcu odkryłem, że ten błąd występuje z powodu dostępu do obiektu bez wątku w postaci wątku. W rzeczywistości nie jest to pierwszy tego typu błąd, wcześniej były podobne błędy. Po prostu przeprowadza testy jednostkowe, a jeśli coś się nie powiedzie, zamyka się gdzieś. A jeśli nic nie zawiedzie, to jego kod jest idealny. Wygląda na to, że nie ma pojęcia o bezpieczeństwie wątków. Jestem w 100% pewien, że istnieje wiele podobnych błędów, które jeszcze się nie pojawiły. Wygląda na to, że PM też nie rozumie wątków.
Problem polega na tym, że pracuje on w firmie znacznie dłużej niż ja. W każdym razie nie mogę po prostu powiedzieć „ten facet jest niekompetentny w tym obszarze”, ponieważ to zawsze pokazuje cię jako „złego gracza zespołowego” itp.
źródło
Odpowiedzi:
Przekonaj premiera, że aby uniknąć takich błędów, wiedza zespołu na temat tworzenia wątków powinna zostać ulepszona i powiedz im, że jesteś gotów zorganizować coś w rodzaju warsztatów lub prezentacji na ten temat. Nie rób z tego osobistej rzeczy między tobą a twoim kolegą.
źródło
Napisz test jednostkowy, który pokazuje błąd i poproś go o naprawienie.
źródło
źródło
Myślę, że Twoja firma nie powinna używać wielowątkowości.
Po wykonaniu ogromnie wielowątkowego projektu odkryłem, że dwie techniki mają kluczowe znaczenie dla sprawnego działania. Po pierwsze , kod musiał być napisany poprawnie. Każde pole musiało zostać ręcznie sprawdzone, aby upewnić się, że zostało poprawnie zadeklarowane i poprawnie zsynchronizowane, gdziekolwiek się odwołuje. (Ostrzeżenie: Upraszczam tu trochę, aby moja odpowiedź była krótka - lub w każdym razie krótsza.) Po drugie , kod musiał zostać przetestowany przez uruchomienie go na maszynach jedno- i wielordzeniowych - wiele minut przy użyciu 100% każdego rdzenia. (A jeśli wykorzystuje tylko 2% każdego rdzenia, jak to często robiłem, to też jest błąd).
Możesz być w stanie sobie z tym poradzić, ale Twoja organizacja nie. Nawet jeśli zrozumieli problem, którego nie rozumieją, nie mają specjalistycznej wiedzy.
Większość języków zapewnia sposoby na uniknięcie tego. Jeśli masz czytnik gniazd, który zwykle ma swój własny wątek, poproś o informacje w głównym wątku tak szybko i prosto, jak to możliwe. Jeszcze lepiej, poszukaj klas / funkcji systemowych, które poradzą sobie z wątkiem czytania. Użyj kolejki, która uruchamia „zdarzenia” jedna po drugiej, jak większość interfejsów API GUI. (Skorzystaj z samej kolejki zdarzeń interfejsu GUI API.) Jeśli potrzebujesz przetwarzania równoległego, prawdopodobnie znajdziesz jakiś „wątek roboczy”, który pozwoli ci przechowywać dane / pola w jednym wątku, obsługując wszystkie transfery.
Podkreśl wszystkie niebezpieczeństwa wielowątkowości. (Straszne historie: Mój ulubiony błąd zawierał kilka wierszy, takich jak
int i = 5; i = i * i;
:, co spowodowało,i
że uzyskałem wartość 35. Jednym z nich, które dużo widziałem, było:if (thing != null) thing.reset();
zgłoszenie wyjątku zerowego wskaźnika.) Myślę, że twoją jedyną nadzieją jest zrozumienie, że są wkraczając w cały, nowy, dziwny świat, i że może powinni zrobić jeden wielki krok wstecz.Nie jestem pewien, jak należy obsługiwać wielowątkowość . Jeśli pracę można powierzyć jednej osobie, a wszystko, co zrobią, zostanie wyrzucone, jeśli zawiedzie, dobrze. Ale zespół będzie tylko tak silny, jak jego najsłabszy członek, a nawet dobry programista będzie miał problem z pełną obsługą wielowątkowości. Mam nadzieję, że język znajdzie sposób, aby zapewnić mu bezpieczeństwo. Widziałem tam pomocne oprogramowanie. Myślę jednak, że najlepiej unikać wielowątkowości, chyba że czas wykonania jest krytyczny i dostępny jest dobry programista lub sprawdzony zespół.
źródło