abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 22:11 | Bezpečnostní upozornění

    Finanční skupina Partners se stala minulou neděli obětí kybernetického útoku, při kterém se útočníci dostali k některým osobním údajům klientů. Společnost o tom informovala ve čtvrtek. Ujišťuje, že peníze klientů nejsou v ohrožení. „Kybernetický útok zasáhl část IT infrastruktury naší společnosti. Ihned po zjištění útoku jsme s pomocí externích bezpečnostních odborníků začali intenzivně pracovat na minimalizaci škod. Útočníci se

    … více »
    Ladislav Hagara | Komentářů: 0
    dnes 03:55 | IT novinky

    Americká technologická společnost Meta Platforms se dohodla, že zaplatí až zhruba 18 miliard dolarů (asi 373 miliard Kč) za mimosoudní urovnání sporu o závislosti dětí na sociálních sítích a provede významné změny pro jejich používání mladistvými. Téměř tři desítky států USA firmu v roce 2023 obvinily z toho, že sítě Facebook a Instagram vědomě navrhla tak, aby u dětí vyvolávaly závislost, a zatajovala tyto dopady před veřejností. Firma se

    … více »
    Ladislav Hagara | Komentářů: 2
    dnes 02:55 | Komunita

    Byl publikován aktuální přehled dění a novinek z vývoje Asahi Linuxu, tj. Linuxu pro Apple Silicon. Blíží se vydání podporující čipy M3. Vývojáře lze podpořit na GitHub Sponsors a Open Collective.

    Ladislav Hagara | Komentářů: 0
    včera 16:55 | Nová verze

    Kancelářský balík LibreOffice byl vydán ve verzi 26.8. Mimo jiné vylepšuje typografii a kompatibilitu s formáty MS Office, více v poznámkách k vydání.

    |🇵🇸 | Komentářů: 0
    včera 14:55 | Nová verze

    Armbian, tj. linuxová distribuce založená na Debianu a Ubuntu optimalizovaná pro jednodeskové počítače na platformě ARM a RISC-V, ke stažení ale také pro Intel a AMD, byl vydán ve verzi 26.8. Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 7
    včera 11:44 | Nová verze

    Byla vydána nová verze 23.1.0, tj. první stabilní verze z nové řady 23.1.x, překladačové infrastruktury LLVM (Wikipedie). Přehled novinek v poznámkách k vydání: LLVM, Clang, LLD, Extra Clang Tools, Libc++, Polly a Flang.

    Ladislav Hagara | Komentářů: 0
    včera 02:11 | Nová verze

    Google Chrome 152 byl prohlášen za stabilní. Nejnovější stabilní verze 152.0.7977.64 přináší řadu novinek. Podrobný přehled v poznámkách k vydání. Opraveno bylo 327 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.

    Ladislav Hagara | Komentářů: 0
    včera 01:11 | Komunita

    Před 35 lety, 25. srpna 1991, oznámil Linus Benedict Torvalds v diskusní skupině comp.os.minix, že vyvíjí (svobodný) operační systém (jako koníček, nebude tak velký a profesionální jako GNU) pro klony 386 (486), že začal v dubnu a během několika měsíců by mohl mít něco použitelného.

    Ladislav Hagara | Komentářů: 3
    25.8. 16:33 | IT novinky

    Apple představil čipy M6 a M5 Ultra, Mac mini s M6 nebo M5 Pro a Mac Studio s M5 Max nebo M5 Ultra. Fedora Asahi Remix zatím podporuje jenom M1 a M2.

    Ladislav Hagara | Komentářů: 22
    25.8. 14:11 | Komunita

    Firefox 157 přinese zapnutou podporu rastrového grafického formátu JPEG XL. Založena je na v Rustu napsané implementaci jxl-rs používané i v Chrome a Chromiu.

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (10%)
     (7%)
     (2%)
     (19%)
     (29%)
     (7%)
     (6%)
     (2%)
     (15%)
     (22%)
    Celkem 2503 hlasů
     Komentářů: 31, poslední 13.8. 00:27
    Rozcestník

    Dotaz: Plánovač periodických tasků v C

    8.3.2022 19:44 MilanC | skóre: 16
    Plánovač periodických tasků v C
    Přečteno: 1182×
    Ahoj,

    potřebuji vytvořit jakýsi jednoduchý periodický plánovač několika samostatných úloh v Cčku. Každá úloha se bude spouštět nekonečně krát v nějakém intervalu od několika sekund po hodiny. Na přesnosti až tak nezáleží. Hned jsem dostal nápad, udělat to pomocí vláken, kdy vždy 1 úloha = 1 vlákno a periodu řešit sleepem vlákna na daný čas. Trochu jsem ale narazil při ukončování programu/vláken, což mě napadlo řešit rozložením dlouhého intervalu na smyčku 1s sleepů s testem na ukončení vlákna. Má otázka zní, jestli to koncepčně nelze v Cčku udělat ještě nějak lépe?

    Tady je nástřel pro 2 vlákna... https://pastebin.com/5e4KPgjR

    Díky.

    Odpovědi

    8.3.2022 19:52 MilanC | skóre: 16
    Rozbalit Rozbalit vše Re: Plánovač periodických tasků v C
    Ten problém s ukončováním jsem myslel tak, že jsem tam měl původně sleep(args->delay), což se pak samozřejmě při nastavení sRunning na 0 nevykoná bezprostředně, ale při delší periodě až po jejím uplynutí. Toto jsem tedy řešil tím for cyklem, asi je to patrné.
    8.3.2022 20:27 MarV | skóre: 11
    Rozbalit Rozbalit vše Re: Plánovač periodických tasků v C
    Použil bych systémový časovač https://man7.org/linux/man-pages/man2/timer_create.2.html. V hlavním vlákně čekat na ukončovací podmínku a pak časovače zabít.
    9.3.2022 15:27 jiwopene | skóre: 31 | blog: Od každého trochu…
    Rozbalit Rozbalit vše Re: Plánovač periodických tasků v C
    Viz #2, nebo je také možné pro ukončitelné čekání použít poll(2) s timeoutem a pipe(2). (Vytvořím rouru, pollem v jednom procesu/vlákně čekám na příchozí data a ve druhém vlákně nebo třeba handleru signálu pro ukončení pošlu data.) Takové řešení se hodí, pokud už rourou (nebo soketem apod.) posíláme nějaký příkaz pro ukončení.
    .sig virus 3.2_cz: Prosím, okopírujte tento text do vaší patičky.
    11.3.2022 10:41 MilanC | skóre: 16
    Rozbalit Rozbalit vše Re: Plánovač periodických tasků v C
    Díky, díval jsem se na obě varianty a přijde mi to nějaké složité. :-) Zkusím to nějak blíž nastudovat. Ta varianta s timery by mohla být schůdná.
    11.3.2022 15:45 z_sk | skóre: 34 | blog: analyzy
    Rozbalit Rozbalit vše Re: Plánovač periodických tasků v C
    debian.plus@protonmail.com
    15.3.2022 09:50 Mayhem
    Rozbalit Rozbalit vše Re: Plánovač periodických tasků v C
    Kdyz uz to tedy musi byt v cecku, na vlakna se vykasli, to je overkill. Normalne naforkuj potrebny pocet procesu, v childu pouzij bud ohandlovany alarm nebo sleep a udelej, co potrebujes. V pripade potreby cekajici childy ukoncis zaslanim sigtermu. A zombie si v parentu uklidis zachycenim sigchld.
    15.3.2022 13:33 MilanC | skóre: 16
    Rozbalit Rozbalit vše Re: Plánovač periodických tasků v C
    Ahoj, šlo by to krapet více pro lamu případně odkázat na nějaký příklad? A ano v C to musí být, bohužel. :(
    15.3.2022 15:34 kvr
    Rozbalit Rozbalit vše Re: Plánovač periodických tasků v C
    Prostě místo pthread_create() použiješ fork() a pustíš ten child tam. Zbytek řešení by měl zůstat víceméně stejný. ... ne, že bych s tím souhlasil, pthread bude rozhodně efektivnější, na druhé straně chyba v pouštěné funkci shodí celý proces, zatímco v případě fork() jenom ten child.

    Jako to původní řešení fungovat bude, pominu-li to, že nebude pouštět každých n vteřin, ale n vteřin + doba operace té funkce. A samozřejmě neefektivní využití threadů, které nejspíš budou převážnou dobu jenom spát (což bude v rámci stovek threadů asi ok). Ideální by bylo použití nějakého threadpool, nejlépe který umí rovnou schedulovat podle času, něco jako Java https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/ScheduledExecutorService.html#scheduleAtFixedRate(java.lang.Runnable,long,long,java.util.concurrent.TimeUnit) . Letmým pohledem nedokážu nic najít pro čisté C. Něco naimplementovat asi nebude extra složité (buď timer_create nebo poll a schedulovat ručně, a k tomu normální threadpool), ale pořád složitější než původní řešení - otázkou je, stojí to za to?
    16.3.2022 09:38 Mayhem
    Rozbalit Rozbalit vše Re: Plánovač periodických tasků v C
    ne, že bych s tím souhlasil, pthread bude rozhodně efektivnější, na druhé straně chyba v pouštěné funkci shodí celý proces, zatímco v případě fork() jenom ten child.
    Efektivnejsi? Mozna ano, ale uvedom si, ze novy proces se udela jen na zacatku. Pak se stejne ceka. A v jakych poctech se vlastne pohybujeme? Myslim, ze v takovych, kde vytvoreni child procesu opravdu nebude problem s rezii. ;-)
    16.3.2022 15:11 kvr
    Rozbalit Rozbalit vše Re: Plánovač periodických tasků v C
    Efektivnejsi? Mozna ano, ale uvedom si, ze novy proces se udela jen na zacatku. Pak se stejne ceka. A v jakych poctech se vlastne pohybujeme?
    Efektivnější neznamená jen vytvoření procesu, ale celou dobu údržbu těch procesů (vlastní tabulka virtuální paměti - i když z velké části samotná paměť asi sdílená, taky, kdo ty child procesy bude sestřelovat). Pokud se pohybujeme v rámci desítek funkcí - pak je fork ok, stovky, možná nízké tisíce - threads jsou ok, u víc by to chtělo ten threadpool. Počítám, že tady půjde o jednotky až desítky, proto jsem psal, zda to stojí za ty komplikace (respektive komplikace je to, že pro čisté C takové knihovny moc nejsou, jinak by to bylo naopak jednodušší).
    17.3.2022 09:11 Mayhem
    Rozbalit Rozbalit vše Re: Plánovač periodických tasků v C
    Efektivnější neznamená jen vytvoření procesu, ale celou dobu údržbu těch procesů (vlastní tabulka virtuální paměti - i když z velké části samotná paměť asi sdílená, taky, kdo ty child procesy bude sestřelovat).
    Proc bude vetsinu dobu sveho zivota pouze spinkat, nebal bych se tedy teto rezie.
    Pokud se pohybujeme v rámci desítek funkcí - pak je fork ok, stovky, možná nízké tisíce - threads jsou ok, u víc by to chtělo ten threadpool.
    Jiste, ThreadPool a napsat to treba v jave by bylo nejlepsi, ale to tazatel nechtel. Pro jeho ucel naprosto postacuje model s forkem a signal. A garantuji vam, ze pro tento ucel nejsou i radove stovky na prumernem zeleze problem.
    Počítám, že tady půjde o jednotky až desítky, proto jsem psal, zda to stojí za ty komplikace (respektive komplikace je to, že pro čisté C takové knihovny moc nejsou, jinak by to bylo naopak jednodušší).
    +1

    Take mi prijde, ze pro zacatecnika jsou veci okolo forku a signalu daleko pochopitelnejsi nez prace s pthreads, ktere v C maji vylozene hnusne api.
    21.3.2022 09:47 Zm
    Rozbalit Rozbalit vše Re: Plánovač periodických tasků v C
    Signály jsou problematické, při jejich použítí se musí kontrolovat všechna sys. volání, zda nedošlo k přerušení signálem.
    22.3.2022 09:53 MilanC | skóre: 16
    Rozbalit Rozbalit vše Re: Plánovač periodických tasků v C
    Ahoj, postupně si hraji s těmi vlákny a tak mě napadlo, nebylo by snadné řešení pomocí pthread_cond_timedwait? Myslím nahradit jím ten sleep. Mělo by to řešit problém rychlým ukončením a požadovaným čekáním zároveň. Bylo by to řešení?

    Nicméně se mi to nějak nedaří naimplementovat pro více vláken.

    Tady jsem se pokusil o malé demo, "tasky" to periodicky spouští, ale mám tam nějaký problém s ukončením při CTRL+C. Někdy to zůstane viset na nějakém joinu, nevím proč. :(
    Mmain(): sending cancellation request
    Joining thread 0
    main(): thread wasn't canceled (shouldn't happen!)
    main(): sending cancellation request
    Joining thread 1
    main(): thread wasn't canceled (shouldn't happen!)
    main(): sending cancellation request
    Joining thread 2
    main(): thread was canceled
    main(): sending cancellation request
    Joining thread 3
    main(): thread wasn't canceled (shouldn't happen!)
    main(): sending cancellation request
    Joining thread 4
    main(): thread wasn't canceled (shouldn't happen!)
    main(): sending cancellation request
    Joining thread 5
    _
    
    https://pastebin.com/BmECNELD

    K čemu je tam nutný prosím ten fakeMutex? PS: Zkusil jsem i ně které zde zzmíněné další varianty, ale přišlo mi to až zbytečně složité.
    22.3.2022 13:26 MilanC | skóre: 16
    Rozbalit Rozbalit vše Re: Plánovač periodických tasků v C
    Tak už jsem na to asi přišel. Pokud program signalizuje ukončení, tak je třeba přerušit to čekání v jednotlivých vláknech na dané podmínce. Takže stačí poslat pthread_cond_broadcast(&fakeCond); a pak pro jistotu ještě počkat na dokončení vláken přes join().
    22.3.2022 22:15 kvr
    Rozbalit Rozbalit vše Re: Plánovač periodických tasků v C
    Fake mutex je tam proto, že tak funguje condition:

    - Producer by měl zamknout stav, nastavit indikátor a udělat broadcast na podmínku asociovanou s mutex, a odemknout mutex.

    - Consumer zamkne stav, zkontroluje indikátor, rozhodne se co dál. Pouze pokud potřebuje čekat na indikátor, udělá wait na condition, který zároveň dočasně odemkne mutex, aby ho producer mohl přenastavit.

    Pokud by tam ten mutex nebyl, tak přístup k indikátoru bude neizolovaný a může dojít k race condition, když producer pustí broadcast v mezičase kdy consumer kontroluje indikátor a než udělá wait na condition.

    (indikátor může být cokoliv - zde asi exit, ale typicky to bývá prázdná nebo plná fronta apod)

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.