Hejto.pl
Zdjęcie w tle

Społeczność

Programowanie

1k+

Piszę sobie poprawki do kodu protokołu OPC UA, nic specjalnego. Ale udało mi się doprowadzić Wireshark (narzędzie wspomagające analizy ruchu sieciowego) do płaczu. Dowód na obrazku. Wystarczyło, że Wireshark zobaczył wygenerowany przeze mnie pakiet.


Jak patrzę ile tam jest poziomów abstrakcji to też mam chęć płakać. Niby zlecenie na 100h, a już widzę, że mi się zejdzie dłużej. Jakieś 50-100%. Teoretycznie mogę zostawić to po skończonym limicie, ale głupio porzucić rozwalony kod, jak już się zaczęło i wlazło tak głęboko.

8959adfb-b00e-4bc9-84c8-1eaead8067ff
db0b200b-5f23-449c-8a7d-dbe0f4317805

Zaloguj się aby komentować

Załóżmy, że chciałbym napisać UDP serwer, który będzie przetwarzał dużą ilość pakietów na sekundę. Co lepsze?

Rust czy Go?

21 Głosów

Go. Nie wiem co piszesz, ale nie wierzę, że jakiekolwiek różnice w wydajności jakie dałbyś radę wycisnąć z pisania w Rust miałyby dla Ciebie jakiekolwiek znaczenie. Za to spędzilbyś 10x więcej czasu na napisanie kodu. Do tego za n lat dużo łatwiej będzie Ci się połapać w kodzie Go, niż Rust. Tylko uważaj na nadmierne alokacje ze względu na GC.


W Rust bym szedł w przypadku gdy już używasz go w projekcie i miałbyś korzyści ze wspólnych crate'ów.

Zarówno @koszotorobur jak i @lurker_z_internetu mają rację z ważnych powodów, a ja bym powiedział: zobacz jaki jest koszt napisania i utrzymania takich serwerow vs koszt dostawienia większej ilości instancji, gdy napiszesz w "wolniejszym" języku ale szybciej. Może się okazać, że inwestycja się po prostu nie zwraca, a serwer możesz napisać nawet w pythonie

Zaloguj się aby komentować

W sumie ciekawe case study z #webdev #programowanie


Zwykle się nie zdarza w 2024. Ale musiałem zaimplementować obrazki na spritach jak 20 lat temu.


Problem

Mapka z polskimi herbami https://deykun.github.io/maps/heraldyka


Herbów było 2k, każdy na absolucie każdy był w osobnym src, jak się wchodziło (o dziwo na chromie o wiele gorzej niż na firefoxie) to była zawiecha na ileś sekund (potem jak się ogarnęło to już raczej działało), raport z lighthouse 3/4 się psuł przy odpaleniu i renderował się dobre 3 minuty+ (zawierał uwagi o przesunięciach w tych setkach elementów).


Dostałem nawet 2 razy bana na IP na githubie, bo 3 otwarte karty potrafiły pobrać 8k obrazków. Wspomniane tutaj.


Raport z lighthouse jest we wpisie.

18.8 sekund blokowania wątku!


Ale w sumie ciekawy kejs, bo chcemy mieć elementy w x i y i chcemy mieć to 2k obrazków.


Oczywiste nieoczywiste rozwiązania to:


  • przenieść mapkę do canvasa pozbędziemy się wtedy 2k nodów html

  • stworzyć sprite obrazków i kadrować


Co zrobiłem:


  1. Zmieniłem obrazki na webp, dodałem srcset, co poprawiło wynik delikatnie

  2. Stworzyłem canvasa (ostatecznie go nie używam na tej stronie)

  3. Do canvasa stworzyłem sprite 180 herbów na obrazek -> zamiast 2000 obrazków, pobiera ~11

  4. Wykorzystałem spritery na tej stronie bez canvasa (jako background-image)


Rezultat:

Strona się ładuje normalnie, skok z 52/100 punktów wydajności przy 2.1k herbów do 81/100 z 2.6k herbów.


Issue na githubie: https://github.com/Deykun/maps/issues/16


W sumie spoko przypadek, pierwszy raz używałem spritów i canvasa dla zwykłej i koniecznej optymalizacji.

e9181fbd-d0e0-4741-b735-eda425da0eb9
24dc7a57-1f36-45ae-8b5f-7b7bc126a79d

Zaloguj się aby komentować

Zaloguj się aby komentować

Koniec IP Box dla programistów, kancelaria premiera opublikowała projekt zmiany ustawy o podatku dochodowym gdzie znalazł się podpunkt 2.b):


zmiany w preferencji IP Box – wprowadzenie wymogu zatrudnienia,


Prawdopodobnie ma to na celu wyłączenie samozatrudnionych programistów z możliwości rozliczania się preferencyjną stawką podatkową 5%, która to została wprowadzona w 2019 roku.


Tekst projektu: https://www.gov.pl/web/premier/projekt-ustawy-o-zmianie-ustawy-o-podatku-dochodowym-od-osob-fizycznych-ustawy-o-podatku-dochodowym-od-osob-prawnych-oraz-niektorych-innych-ustaw6


#programowanie #programista15k #software #technologia #javascript #java c#

Powrót na UoP to była jedna z lepszych decyzji przy zmianie pracy. Żadnego pierdolenia się ze zmianami w podatkach, uszczelnianiem, rozliczaniem, jakimiś kontami bankowymi, żadnych umów gentlemańskich o "liczbę dni płatnych kiedy zleceniobiorca powstrzymuje się od wykonywania pracy". A idź pan w pizdu.

Zaloguj się aby komentować

Mija mi tydzień urlopu od programowania w pracy, a ja tymczasem tworzę programy na własny użytek - normalnie świetna metoda na odpoczynek(do pracy pewnie przyjdę bardziej zmęczony niż przed urlopem)


https://streamable.com/s0stha


Pierwszym z nich jest imager(kiedyś o nim pisałem) - https://addons.mozilla.org/en-US/firefox/addon/imager/

Dodałem tam opcję wyciągania wszystkich linków ze strony(działa to w ~90% przypadków) tj. obrazy, filmy czy inne odnośniki.


Potrzebowałem to głównie do cda, by wyszukać w źródłach plik z rozszerzeniem mp4, wgrać potem go na pendrive i podpiąć do telewizora

Dotychczas robiłem to ręcznie co było niepotrzebnie skomplikowane i coś co robiłem zazwyczaj w 10 sekund, zautomatyzowałem tak, że teraz trwa to tylko 2 sekundy a zmarnowałem gdzieś ze 2 godziny na pisanie tego


Drugi program to minimizer - https://crates.io/crates/minimizer

Przy zgłaszaniu błędów w różnych programach tj. ruff czy oxc, moje pliki zazwyczaj są dość duże, przez co autorzy mają problem znaleźć konkretną przyczynę/wyodrębnić problem.

Zrobiłem więc minimizer by w automatyczny sposób zmniejszać rozmiar plików, tak by ciągle program reagował na te pliki(np. by ciągle się wysypywał).

Ostatnio w bibliotece lofty znalazłem plik który przy wczytaniu wysypywał cały program i przy ~3 tysiącach prób, trwających około minut, plik został zmniejszony z ~100KB do 10 bajtów zachowując swoją początkową właściwość - czyli ciągle powodował wyspywanie się programu


Jak wspominałem to narzędzia na użytek wewnętrzny, więc jak chcecie używać to używajcie, ale nie bijcie jak coś nie będzie działało


#programowanie

@qarmin Kiedyś gdy pobierałem dużo filmów z cda i innych stron to zrobiłem coś podobnego tylko zamiast rozszerzenia do przeglądarki to napisałem skrypt do Tampermonkey który dodaje przycisk pobierz pod playerem więc w sumie jeszcze prościej i szybciej.

Btw yt-dlp potrafi pobierać też filmy z cda jak coś.

72f56121-3c19-43ee-a462-a4a9b1222d31

Zaloguj się aby komentować

Potrzebuję propozycji na technologie do stworzenia aplikacji dla backendu na serwer i frontendu na komputery i telefony zlecanej zewnętrznej firmie.


Pomagam przy realizacji koncepcji tworzenia aplikacji(mimo że akurat w powyższych tematach średnio się znam), tak by stworzona aplikacja nie kosztowała krocia, działała i by jej rozwój łatwo można było przerzucić na barki innej firmy.


Zapytania o to były wysłane do różnych firm i najczęściej polecanymi techonogiami jest nodejs na serwer, react/react native/nodejs/vue3 jako frontend dla aplikacji jak i również PWA.


Mały problem jest z tym, że akurat doświadczenie głównie mam w komputerowych aplikacjach, więc nie do końca ogarniam wszystkie plusy i minusy poszczególnych rozwiązań.


W skrócie aplikacja to powinno być kilka/kilkanaście ekranów dobijających się do serwera i tam zapisującymi/odczytującymi dane. Raczej nic zaawansowanego - przynajmniej na tę chwilę.


Co do aplikacji na serwer, to myślę że dużo lepszym pomysłem niż NodeJS jest jakaś aplikacja w rust, która zwłaszcza że z racji bycia niewielką(jedyne zadania to autentykacja i zapis/odczyt danych z bazy) nie powinna powodować problemów z długą kompilacją czy zbytnią złożonością a pozwalałaby na szybszy/prostszy deploy i inne ficzery(oczywiście jako zlecacza aplikacji mnie to niezbyt teraz obchodzi to, ale w przyszłości przy aktualizacji/migracji/problemach z wydajnością to mogłoby sprawiać problemy)


Co do aplikacji na telefony/komputer to optowałbym raczej za użyciem Tauri + ts + svelte, zwłaszcza że Tauri 2 beta umożliwia budowanie aplikacji zarówno na windowsy jak i androida.

Tutaj też zastanawiam się nad aplikacją PWA/zwykłą stroną, jednak boję się o jakieś dziwne ograniczenia typu brak możliwości odczytywania linii papilarnych, czy korzystania ze zwykłych funkcji w telefonie(nie znam się, więc to tylko przypuszczenie).

Raczej nie pchałbym się w React na windowsa i React Native na androida, bo to duplikowałoby kod a wolałbym by był on niemal wspólny na tych dwóch systemach, różniący się jedynie rozmieszczeniem elementów na ekranie, a nie technologią


Jest sens się pchać w te technologie, czy może inne byłyby lepsze?


#programowanie

@qarmin Skoro ogarniasz Rusta to może na front zobacz to, ostatnio mi się obiło o oczy: https://dioxuslabs.com/


A co do backendu to jeżeli to ma być coś małego i z niewielkim ruchem to imo Node.js + jakiś fajny framework (typu Fastify, Nestjs albo Hono) będzie idealny i nie sądze żeby napisanie tego w Rustcie cokolwiek ułatwiło.

@Catharsis @wombatDaiquiri

Może nie napisałem tego dość jasno ale to nie ja będę pisał aplikację, tylko będę ją zlecał do zrobienia, więc to co ja znam i w czym mogę pisać jest niezbyt przydatne.


Ja jako osoba techniczna, mam za zadanie jedynie pomóc znajomym by przypadkiem zewnętrzna firma nie szła w kierunku nadmiernych wydatków (np. dwóch aplikacji zamiast jednej) czy też użycia technologii niedopasowanych do wymagań/niemodernizowalnych, których używają od dawna i nie chce im się niczego zmieniać(bo np. póki co wszystko działa).


Dioxus raczej odpada, bo nie widziałem by ktokolwiek go używał i wydaje się trudniejszy niż tauri.

@qarmin nie ma czegoś takiego i nie polecam cudować. Node + React / React Native powinien wystarczyć. Tak naprawdę robienie znajomego w chuja będzie raczej polegać na pisaniu chujowego kodu albo niedostarczeniu funkcjonalnosci w terminie.


Wycudowana technologia tylko utrudni znalezienie kogoś kto będzie chciał to ugryźć.

Tauri??


Chopie, kto ci to utrzyma?.


Node.js na serverze, react/next.js na apce webowej ktora bedzie zoptymalizowana na telefony.


Wszedzie JS, technologie ktore zna wiele osob + dosyc latwy stack. Rust jest spoko, ale wez znajdz ogarnietych specjalistow od reki, a w razie jak aktualni programisci zrobia "pa, pa" to szybko ich podmien.


Chociaz przy reactie sie nie upieram bo ostanie zmiany ida w zlym kierunku. Powoli mysle czym zastapic react.

@666 W jaki sposób React idzie w złym kierunku? Serio pytam bo nie widziałem osoby która nie cieszyłaby się na wieści o nowych zmianach które wejdą w następnej wersji Reacta lol

@Catharsis odpowiem ci z mojej perspektywy. Robie Backend w node.js, ale ogolnie jestem Fullstackiem. Raz na 100 lat cos na FE zrobie. Co siadam do UI w reactie (w ramach taskow w robocie) to sa grube zmiany, glownie w sposobie managementu stanu i sposobu w jaki stan zmienia UI. Zobacz jaka droge przebyl React:


  • stan w storze przekazywany w props'ach (moze byc to redux). Dodatkowo stan "this.state" ktory uj wie do czego jest. W tej wersji reacta, masz metody lifecycle w ktorych robisz duzo if'ow w ktorych sprawdzasz czy w propsach juz sa dane ktore fetchowales. No lipnie sie to pisalo

  • nowosci: fuction components. Ulatwilo zycie i otworzylo droge do hookow. No ale state w propach juz tutaj nie pasuje, wiec dodajemy contexty - kolejny sposob przechowywania stanu. Czyli mamy contexty, this.state, propsy i pewnie cos jeszcze....

  • na dobre wchodza hooki. Zupelnie zmianiaja sposobw w jaki zmianiamy UI za pomoca stanu. Na tym etapie Ktos kto pisal kod w reactie 2-3lata temu kompletnie nie wie co sie dzieje. Hooki fajne ale duzo rzeczy jest niejawnych, jak np nazwy hookow, trzymanie ich stanu itp - duzo rzeczy trzeba miec w pamieci bo z kodu tego nie wyczytasz. Ogolnie to powinna byc pierwsza wersja reacta w mojej opinii

  • hooki sa passe, tera beda signals'y - kolejna gruba zmiana, kolejny sposob managementu stanu, nie dokonca chce mi sie nawet w to zaglebiac i mysle juz o jakims innym frameworku


Takze programisci core'a reacta sami nie wiedza jak zarzadzac stanem apki, to ja mam wiedziec? Nie wiedza w jakim kierunku ma isc react na co najlepszym przykladem sa sygnaly zgapione od angulara bo taka moda.

Zaloguj się aby komentować

Zaloguj się aby komentować

Misie z tagu #programowanie mam wkrótce rozmowę na Junior Java, w opór mi zależy na tym żeby to stanowisko dostać, sam fakt że zaprosili na rozmowę już znaczy dużo, ale to dopiero jeden krok


Jeśli ktoś ma jakieś uwagi, rady, propozycje, cokolwiek co mi może pomóc, co sobie przypomnieć prócz wszystkiego to zapraszam w komentarz lub na priv


Pozdrawiam

@konrad1 poza tym co wyżej to mogą pytać również o gita (np. co zrobisz jeśli chcesz poprawić istniejący commit?).


Nie jestem Java developerem ale kiedyś na jednej rekrutacji na pieniężne stanowisko chcieli ode mnie by wyjaśnić jakiś fragment kodu w Javie typu masz dwie zmienne, tu są jakieś operacje na nich i co zostanie wyprintowane po tych operacjach (czyli np. czy możesz dodać String do Stringa, zamiana Stringa na Int itp)

dobre. Kiedyś gdy prowadziłem rozmowy to zawsze pytałem o GIT. Ludzie mówią, że znają go super, a potem do repo trafia syf w stylu "commit A", "shit b". Bo git commit, pull, push to raczej wiedza podstawowa, a znajomiść gita to też submodule, subtree, workspace, reflog i wiele innych. Już nie mówiąc o poprawnym tytule i opisie zmiany.

@GitHub @zboinek @koszotorobur @jiim @monke @dotevo Blisko, jak podpisze umowę można pić kompot piwko herbate co kto tam woli

Zaloguj się aby komentować

Zaloguj się aby komentować

Ostatnio stworzyłem sobie fuzzer, który znalazł masę problemów w popularnych programach tj. ruff(linter do pythona), oxc(linter do js/ts), lofty(zapisywanie/odczytywanie tagów z plików muzycznych), biome(formatter dla js/ts) i wiele innych


przykłady zgłoszonych issue:



niestety wszystkie znalezione problemy albo zostały naprawione albo czekają na poprawę i nic więcej nie znajduję


Możecie podrzucić jakieś programy, które mógłbym potestować(głównie rust, choć nie tylko)?


Jest jednak kilka prostych ograniczeń.

Program musi:


  • być w miarę popularny - nie chce mi się testować czegoś co tylko 2 aktywnych użytkowników

  • pracować na pojedynczych plikach/grupach plików - np. na wejściu podawany jest plik który ma sprawdzić lub biblioteka powinna prosto umożliwiać stworzenie takiego programu.

  • pozwalać na szybkie iteracje - jedna iteracja programu np. sprawdzenie pliku nie powinno trwać dłużej niż kilka sekund

  • być open-source


#programowanie

Zaloguj się aby komentować

Ostatnio w pracy miałem problem z elsticsearchem. Nigdy nie dane mi go było poznać więc rozwiązując ten problem sporo nauczyłem się o tej technologii.


I tu pojawia się moje pytanie:


Znacie może takie bardziej zaawansowane i bazujące na prawdziwych problemach platformy do doskonalenia skilla programistycznego?


Jest sporo jakiś leetcodów itp. ale tam są bardziej takie algorytmiczne zadania pod rozmowę kwalifikacyjną.


Idealnie czego bym szukał to coś że dają ci rozgrzebany projekcik w którym jest jakiś błąd albo musisz coś dokończyć.


Wiem że sam mogę sobie jakieś projekty pisać, ale przy samodzielnym pisaniu zazwyczaj idzie względnie po mojej myśli i nie mam szans trafić jakiegoś błędu który przytrafi się przy projekcie większej skali.


#programowanie #programista15k #naukaprogramowania

Znajdź jakiś projekt open source np. na githubie, najlepiej taki, z którego korzystasz na co dzień.

Wejdź na kartę "issues", wybierz jakiś błąd i spróbuj go rozwiązać.


(Pewnie i tak się skończy na tym, że po dwóch dniach prób zbudowania tego gówna lokalnie rzucisz tym w kąt ¯\_(ツ)_/¯ )

@QuentinDamianino Tak jak ktoś już tu napisał, jak ci się nudzi i chcesz się pouczyć naprawiać błędy w czyimś kodzie to zapraszam na GitHubie jest masa open source aplikacji z setkami otwartych "iszu" czekających na naprawienie.

Zaloguj się aby komentować

Ehh, nie mam pomysłu co to może w ogóle być... Na początku widać listę plików, ale później spodziewałem sie plików .wav, a wygląda jakby było skompresowane...

To chyba nie pogmeram w tych plikach...

https://allegro.pl/oferta/edukacyjny-czytnik-kart-do-wczesnej-nauki-jezyka-angielskiego-224-slowka-14557331692


Jak ktoś chce się przyjrzeć to wrzucam plik bin zrzucony z flasha:

https://we.tl/t-wmcmJUMI98


#programowanie

f3d4f04c-f938-4e9f-b085-d7155f65c91c

@Felonious_Gru Tak, to raczej spakowane. `strings` wyrzuca mi same śmieci. FS nie wiem jaki, pakery też nie wiem jakie. Do czego tego potrzebujesz i z czego ten dump?

@ataxbras @myoniwy niestety chiński klon saleae nie daje rady zgrać komunikacji.

Widać, kiedy uc gada z pamięcią, ale dane nie mają większego sensu.


Poddaję się, dużo rbh żeby to dalej analizować, a efekt niepewny

Wrzucam obiecane zdjęcie ic

d59c0496-8313-4a0b-90f9-f3988e418552

@Felonious_Gru

Odkodowałem

░░░░░░░░░░░░░▄▄▀▀▀▀▀▀▄▄

░░░░░░░░░░▄▄▀▄▄▄█████▄▄▀▄

░░░░░░░░▄█▀▒▀▀▀█████████▄█▄

░░░░░░▄██▒▒▒▒▒▒▒▒▀▒▀▒▀▄▒▀▒▀▄

░░░░▄██▀▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█▄

░░░░██▀▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█▌

░░░▐██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐█

░▄▄███▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█

▐▒▄▀██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐▌

▌▒▒▌▒▀▒▒▒▒▒▒▄▀▀▄▄▒▒▒▒▒▒▒▒▒▒▒▒█▌

▐▒▀▒▌▒▒▒▒▒▒▒▄▄▄▄▒▒▒▒▒▒▒▀▀▀▀▄▒▐

░█▒▒▌▒▒▒▒▒▒▒▒▀▀▒▀▒▒▐▒▄▀██▀▒▒▒▌

░░█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐▒▒▒▒▒▒▒▒█

░░░▀▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▌▒▒▒▒▒▒▄▀

░░░▐▒▒▒▒▒▒▒▒▒▄▀▐▒▒▒▒▒▐▒▒▒▒▄▀

░░▄▌▒▒▒▒▒▒▒▄▀▒▒▒▀▄▄▒▒▒▌▒▒▒▐▀▀▀▄▄▄

▄▀░▀▄▒▒▒▒▒▒▒▒▀▀▄▄▄▒▄▄▀▌▒▒▒▌░░░░░░

▐▌░░░▀▄▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▄▀░░░░░░░

░█░░░░░▀▄▄▒▒▒▒▒▒▒▒▒▒▒▒▄▀░█░░░░░░░

░░█░░░░░░░▀▄▄▄▒▒▒▒▒▒▄▀░░░░█░░░░░░

░░░█░░░░░░░░░▌▀▀▀▀▀▀▐░░░░░▐▌░░░░░

Zaloguj się aby komentować

Mam ostatnio problemy z programem, który ubijam poleceniem timeout.


Program wykonuje setki(w zasadzie to grupowo robi 10000) operacji zapisu plików do określonego folderu z wątków rayona(rust) i wygląda na to, że bez względu czy ubijam go sygnałem TERM czy KILL, to nieco później (0-10s) po zabiciu programu, nie mogę usunąć całego folderu z plikami, bo wygląda, że program ciągle w tle tworzy nowe pliki, więc próba usunięcia takiego katalogu przez "rm -rf" wypisuje błąd "rm: cannot remove '/opt/tmp_folder/short_normal_1/16474004021118382402': Directory not empty"


Zatem by rozwiązać problem przerzucam timer końca działania do programu zamiast ubijać program z zewnątrz.


Jednak mam tutaj ponownie zagwozdkę.

Mam dwie koncepcje


Pierwsza to taka, że pierwszy wątek który złapie problem, to przerywa cały program:

fn check_for_exit() {

  if time_left < 0 {

      process::exit(127);

  }

}



files_chunks.into_par_iter().for_each(|| {

   check_for_exit();


   for file in files_chunks {

       fs::copy("file", output_dir);

   }

});


Druga to taka, że czekam aż wszystkie wątki się skończą i dopiero wtedy przerywam wykonywanie programu


fn check_for_exit() -> bool {

  return time_left < 0;

}


files_chunks.into_par_iter().map(|| {

   if check_for_exit() {

       return None;

   }


   for file in files_chunks {

       fs::copy("file", output_dir);

   }


   Some(())

}).while_some().collect<()>();


if check_for_exit() {

   process::exit(127);

}


Niby punkt drugi bezpieczniejszy, ale punkt pierwszy też przecież przecież powinien wszystkie wątki z kopiowaniem plików ubić. Dobrze kminię, czy jednak punkt pierwszy nie jest bezpieczny?


#programowanie

#rustlang

@qarmin Nie pisałem dawno w rust, zwłaszcza na tym poziomie, ale zdecydowanie druga opcja. Wydaje mi się, że w pierwszej opcji będziesz miał proces w kolejce do ubicia/ubity, a to co zostanie to będą tzw. detached threads. Ale nie jestem (już) ekspertem, podpytaj może kogoś innego

@qarmin a to nie jest kwestia tego, że operacje na plikach robi kernel? Ubicie procesu nie przerywa fs::copy.


Po drugie, obsługa sygnałów nie jest synchroniczna. Jak zrobisz kill PID && rm costam, to na pewno to nie zadziała. Musisz poczekać, aż proces obsłuży sygnał i się zamknie.


Jak robisz timeout na wątkach wewnątrz programu, to z pewnością da się to bardziej elegancko obsłużyć.

@qarmin Analizując obie koncepcje, które przedstawiłeś, można zauważyć kilka istotnych różnic w sposobie zarządzania zakończeniem wątków i zatrzymaniem programu.

Pierwsza koncepcja


  • Zalety:

  • Każdy wątek sprawdza warunek time_left < 0 przed rozpoczęciem kopiowania.

  • Jeśli warunek jest spełniony, natychmiast wywołuje process::exit(127), co natychmiastowo kończy cały program.

  • Wady:

  • process::exit(127) powoduje natychmiastowe zakończenie programu bez czekania na zakończenie pozostałych wątków. To może skutkować niekompletnym zakończeniem operacji IO, co może być przyczyną problemów z plikami.

  • Możliwe nieprzewidywalne zachowanie, jeśli process::exit(127) jest wywoływane z wielu wątków jednocześnie.


Druga koncepcja


  • Zalety:

  • Sprawdza warunek time_left < 0 przed rozpoczęciem kopiowania w każdym wątku, ale zamiast natychmiastowego zakończenia, wątki, które spełniają warunek, po prostu kończą swoją pracę.

  • Pozwala wszystkim aktywnym wątkom dokończyć swoje operacje kopiowania, zanim program sprawdzi, czy powinien zakończyć się process::exit(127).

  • Bezpieczniejsze podejście, ponieważ nie powoduje natychmiastowego zakończenia programu, co pozwala na bardziej przewidywalne zarządzanie zasobami.

  • Wady:

  • Może powodować krótkie opóźnienie w zakończeniu programu, jeśli trzeba czekać na zakończenie wszystkich wątków.


Wnioski

Druga koncepcja jest bardziej bezpieczna i elegancka, ponieważ pozwala na kontrolowane zakończenie programu i uniknięcie problemów związanych z nieskończonym tworzeniem plików po wywołaniu timeout.

Natychmiastowe zakończenie programu przy użyciu process::exit w pierwszej koncepcji może prowadzić do nieprzewidywalnych problemów związanych z niedokończonymi operacjami IO. W drugiej koncepcji wątki mogą bezpiecznie zakończyć swoje zadania, co zmniejsza ryzyko wystąpienia problemów z plikami i zasobami.

Zatem rekomenduję skorzystanie z drugiej koncepcji. Jeśli jednak decydujesz się na pierwszą koncepcję, warto wprowadzić mechanizm, który upewni się, że wszystkie wątki zakończyły swoją pracę przed zamknięciem programu, aby uniknąć problemów z niekompletnym przetwarzaniem plików.

Zaloguj się aby komentować

:green_book:

Pracownicy, którzy dołączyli do Nvidia 5 lat temu, są teraz milionerami i prowadzą życie na "półemeryturze"

Nvidia (NASDAQ: NVDA) odnotowała niesamowity wzrost w ostatnich latach. Od początku 2024 roku akcje firmy wzrosły o 167%. W ciągu ostatnich pięciu lat wzrosły o imponujące 3,450%.

https://finance.yahoo.com/news/employees-joined-nvidia-5-years-160012281.html


W sumie ciekawy problem.


Źródło: https://www.tiktok.com/@trading101/video/7384254329965792555


#programowanie #programista15k #nvidia

W sumie ciekawe ilu jest takich pracowników co mają te ponad 10 000 000 $ w akcjach. Załóżmy że jakieś 10% wszystkich tam pracujących. Jak sprzedaż takiej ilości akcji wpłynie na cenę Nvidii na giełdzie oraz co się stanie jęzeli te osoby powiedzą: pi⁎⁎⁎⁎le nie robię na tego prywaciarza złodzieja i pójdzie leżeć na trawkę pindolem do góry.

Zaloguj się aby komentować