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í
×
    včera 16:44 | Komunita

    Dnes v 17:30 bude oficiálně vydána open source počítačová hra DOGWALK vytvořena v 3D softwaru Blender a herním enginu Godot. Release party proběhne na YouTube od 17:00.

    Ladislav Hagara | Komentářů: 3
    včera 14:55 | Humor

    McDonald's se spojil se společností Paradox a pracovníky nabírá také pomocí AI řešení s virtuální asistentkou Olivii běžící na webu McHire. Ian Carroll a Sam Curry se na toto AI řešení blíže podívali a opravdu je překvapilo, že se mohli přihlásit pomocí jména 123456 a hesla 123456 a získat přístup k údajům o 64 milionech uchazečů o práci.

    Ladislav Hagara | Komentářů: 9
    včera 00:11 | Nová verze

    Byla vydána (𝕏) červnová aktualizace aneb nová verze 1.102 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a videi v poznámkách k vydání. Ve verzi 1.102 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.

    Ladislav Hagara | Komentářů: 0
    10.7. 21:00 | Bezpečnostní upozornění

    Byla vydána nová verze 2.4.64 svobodného multiplatformního webového serveru Apache (httpd). Řešeno je mimo jiné 8 bezpečnostních chyb.

    Ladislav Hagara | Komentářů: 4
    10.7. 15:22 | Nová verze

    Společnost xAI na síti 𝕏 představila Grok 4, tj. novou verzi svého AI LLM modelu Grok.

    Ladislav Hagara | Komentářů: 11
    10.7. 12:55 | Bezpečnostní upozornění

    Ministerstvo vnitra odhalilo závažný kyberincident v IT systému resortu. Systém, do kterého se dostal útočník bez oprávnění, byl odpojen a nedošlo k odcizení dat [𝕏].

    Ladislav Hagara | Komentářů: 16
    10.7. 11:55 | Humor

    Před rokem byla streamovací služba HBO Max přejmenována na Max. Dle managementu slovo HBO v názvu nebylo důležité. Včera byl Max přejmenován zpět na HBO Max. Kolik milionů dolarů to stálo? 😂

    Ladislav Hagara | Komentářů: 11
    10.7. 02:11 | Nová verze

    Byla vydána nová major verze 8.0.0 svobodného systému pro detekci a prevenci průniků a monitorování bezpečnosti počítačových sítí Suricata (Wikipedie). Přehled novinek v oficiálním oznámení a v aktualizované dokumentaci.

    Ladislav Hagara | Komentářů: 0
    10.7. 01:11 | Nová verze

    Mastodon (Wikipedie) - sociální síť, která není na prodej - byl vydán ve verzi 4.4. Přehled novinek s náhledy a videi v oznámení na blogu.

    Ladislav Hagara | Komentářů: 1
    10.7. 00:11 | IT novinky

    Instituce státní správy nebudou smět využívat produkty, aplikace, řešení, webové stránky a webové služby poskytované čínskou společností DeepSeek. Na doporučení Národního úřadu pro kybernetickou a informační bezpečnost rozhodla o jejich zákazu vláda Petra Fialy na jednání ve středu 9. července 2025.

    Ladislav Hagara | Komentářů: 8
    Jaký je váš oblíbený skriptovací jazyk?
     (59%)
     (27%)
     (7%)
     (2%)
     (1%)
     (1%)
     (3%)
    Celkem 384 hlasů
     Komentářů: 16, poslední 8.6. 21:05
    Rozcestník

    Občas není od věci vyslovit něco, za co se upaluje nebo ukamenovává. Nic není totiž tak jednoduché, aby byla pravda vždy jediná a na první pohled zřejmá.


    NAVRCHOLU.cz
    Kategorie zápisků
    Aktuální zápisy

    Nejčtenější za poslední měsíc Nejkomentovanější za poslední měsíc

    Rozhraní pro události

    5.12.2006 23:37 | Přečteno: 1351× | Software | Výběrový blog

    Jednou z hlavních (a opravdu pořádně velkých) bolestí je neexistence jednotného rozhraní pro příjem událostí a jejich snadné a bezpečné zpracování. S tím, jak se technologie kevent blíží k rozumně použitelné implementaci, samozřejmě roste naděje na změnu. Současně ovšem vyvstávají i otázky.

    Zpracovávat v Linuxu rozumně události? Dosud nemožné. Máme například program (řekněme server), který má otevřeno x síťových spojení, současně potřebuje hlídat timeouty, sledovat změny určitých souborů a dělat případně některé další věci. Takový server se implementuje dost špatně - buď ho musíme rozštěpit na řadu procesů či vláken (a babrat se s komunikací a synchronizací mezi nimi), nebo používat všelijaká krkolomná řešení, navíc nepříliš efektivní.

    To v takových Windows je na tom člověk o poznání lépe. Může nechat čekat program v jediném volání WaitForMultipleObjects(), a když to vyskočí ven, obsloužit událost, ke které došlo. Lhostejno, o jaký druh události se jednalo. Podobně jednoduchou práci mají i vývojáři na *BSD nebo na Mac OS X. Jen Linux zatím pokulhává.

    Jednoduché je to v případech, kdy máme k dispozici souborové deskriptory. Ty použijeme ve volání select(), poll() nebo epoll() a hned se dozvíme, co se stalo. Problém je ovšem v tom, že tyto deskriptory máme jen pro omezený okruh událostí. Pro mnohé události (asynchronní I/O, časovače, skončení podřízeného procesu atd.) musíme spoléhat na signály - a ty s výše uvedeným nejdou příliš dohromady. Jediným skutečně bezpečným způsobem zpracování signálů je volání sigwait(), které pak musíme použít místo zmíněných funkcí. Tím se ovšem nevyřeší problém se "spojováním" nezpracovaných klasických signálů.

    Je jasné, že cesta ven vede jen přes zavedení skutečně univerzálního rozhraní pro události. Bylo by principiálně možné říct si "všechno bude deskriptor", ale pak vyvstane problém škálovatelnosti. Při velkém množství deskriptorů by to bylo pomalé. Než vymýšlet složitá řešení ve stylu inotify (na jednom souborovém deskriptoru může být větší počet "hooků" identifikovaných vlastními deskriptory), je lépe to udělat opravdu pořádně a dát do nového rozhraní opravdu všechno, co by mohl někdo potřebovat.

    A tím se dostávám k jádru pudla. Dosavadní plány keventu totiž počítají s tím, že se budou sledovat skoro všechny zajímavé události (AIO, časovače, signály, klasické deskriptorové události), ale bohužel ne úplně všechny. Protože si myslím, že by bylo správné využít této chvíle a dotáhnout to do opravdu kvalitní podoby, rád bych viděl v keventu i další události. Jmenovitě:

    Možná teď někdo bude mít pocit, že jsem se praštil o futro a chci z Linuxu udělat Windows. Třeba to tak je, ale každopádně by přidání monitoringu těchto událostí bylo velice přínosné. Mám v plánu poslat to jako námět do LKML, ale nejdřív to tu chci předhodit k veřejné kritice. Byl bych rád, kdyby ten, kdo má proti takovém nápadu nějaké výhrady, je tu předložil - aby se zamezilo případnému zaplevelování LKML (a zbytečné zátěži vývojářů jádra) nesmyslnými nápady.

    Odkazy:

           

    Hodnocení: 100 %

            špatnédobré        

    Anketa

    Chcete, aby v implementaci kevent byly i události, které navrhuji?
     (64 %)
     (3 %)
     (3 %)
     (0 %)
     (31 %)
    Celkem 39 hlasů

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

    Komentáře

    Vložit další komentář

    6.12.2006 14:41 trekker.dk | skóre: 72
    Rozbalit Rozbalit vše Re: Rozhraní pro události
    Jednoduché je to v případech, kdy máme k dispozici souborové deskriptory. Ty použijeme ve volání select(), poll() nebo epoll() a hned se dozvíme, co se stalo. Problém je ovšem v tom, že tyto deskriptory máme jen pro omezený okruh událostí. Pro mnohé události (asynchronní I/O, časovače, skončení podřízeného procesu atd.) musíme spoléhat na signály - a ty s výše uvedeným nejdou příliš dohromady.
    Ad asynchronní I/O a deskriptory - píšeš, že jediným skutečně bezpečným způsobem zpracování signálů je volání sigwait(). Co je špatně na způsobu, kdy se při zpracování signálu SIGIO pomocí select() otestují deskriptory a příslušně se zareaguje? (Za předpokladu, že deskriptorů není příliš mnoho)
    Quando omni flunkus moritati
    Luk avatar 6.12.2006 16:44 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
    Rozbalit Rozbalit vše Re: Rozhraní pro události
    A čekat to bude kde? To je právě důležité. sigwait() (a samozřejmě také sigwaitinfo() a sigtimedwait()) má tu výhodu, že se zpracuje vždy právě jeden signál (a ostatní zůstávají blokované) a nepoužívá se - není potřeba - asynchronní handler. Při jiném řešení už nastávají komplikace s rozlišováním, které všechny signály vlastně přišly. Tak jako tak tam ale zůstane problém s výkonností, protože select/poll operace je obecně O(n).
    Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
    6.12.2006 19:11 trekker.dk | skóre: 72
    Rozbalit Rozbalit vše Re: Rozhraní pro události
    Vypadá to asi nějak takhle:
    int main() {
     struct sigaction sigakce;
     void io_sigio (int i); 
     void casovano (int i);
       ...
     sigakce.sa_handler = io_sigio;
     sigfillset (&sigakce.sa_mask);
     sigakce.sa_flags = 0;
     sigaction (SIGIO, &sigakce, NULL);
     sigakce.sa_handler = casovano;
     sigaction (SIGALRM, &sigakce, NULL);
     for (;;) {pause();}
    }
    Program má jenom reagovat na události - příchod dat ze sítě a periférií a na časovač, takže čeká v nekonečné smyčce.

    Jestli jsem to dobře pochopil, tak při použití sigwait() by program v nekonečné smyčce volal tuto funkci a rozhodoval, jaký signál přišel a jak se zachovat.
    Při jiném řešení už nastávají komplikace s rozlišováním, které všechny signály vlastně přišly.
    To znamená, že když nepoužívám sigwait() a přijde víc signálů najednou, že se některé zahodí a nezpracují? Já měl zato, že se nejprve zavolá obsluha jednoho a pak druhého.
    Tak jako tak tam ale zůstane problém s výkonností, protože select/poll operace je obecně O(n).
    Jasně, proto jsem psal, že předpokládám, že deskriptorů je málo (tento případ rozhodně není to, co je popsáno v blogu - tj. server s mnoha síťovými spojeními, otevřenými soubory apod.)
    Quando omni flunkus moritati
    Luk avatar 6.12.2006 20:13 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
    Rozbalit Rozbalit vše Re: Rozhraní pro události
    Tvůj program má jeden velmi zásadní problém. Možnosti obsluhy signálů v handlerech jsou velmi omezené. Nelze využít nic, co není reentrantní - to se týká např. i streamů nebo alokace paměti na heapu. Navíc všechny globální proměnné, na které se v handleru sahá, musejí být deklarovány jako volatile (= rychlost dolů). A tak dále.
    Jestli jsem to dobře pochopil, tak při použití sigwait() by program v nekonečné smyčce volal tuto funkci a rozhodoval, jaký signál přišel a jak se zachovat.
    sigwait() vrací (resp. zapisuje přes pointer) číslo signálu, který přišel. Funkce sigwaitinfo() a sigtimedwait() dělají totéž, ale navíc ještě poskytují další informace (např. identifikátor časovače, PID ukončeného potomka, PID procesu, který zavolal kill() apod.).

    Všechny tyto funkce fungují tak, že se zavolají s blokovanými signály, tyto se uvnitř odblokují, a když přijde první signál (nebo už nějaký čeká), zase se všechny signály zablokují a vyskočí to ven z funkce. To vše atomicky. Pak lze bezpečně a synchronně dělat cokoliv. Takže se to používá tak, že se v nekonečné smyčce volá sigwait() a vždy se podle čísla signálu zjistí, jaká událost nastala.
    To znamená, že když nepoužívám sigwait() a přijde víc signálů najednou, že se některé zahodí a nezpracují? Já měl zato, že se nejprve zavolá obsluha jednoho a pak druhého.
    Signál se "zahodí" jen v jediném případě - že se jedná o obyčejný (klasický POSIXový, ne-realtime) signál a již nějaký čeká na zpracování. Ovšem když přijde více signálů "najednou" (tedy těsně po sobě), začne se zpracovávat jeden, a pokud ty další nejsou blokované, může kdykoliv začít obsluha jiného (s jiným číslem). Takže to doběhne třeba do půlky handleru a v tu chvíli začne obsluha jiného signálu. Blokace v handleru to úplně neřeší, protože se nemusí stihnout (i když toto není většinou tragédie). Horší ale je, že jsou to pro každý handler 2 syscally navíc, což sežere dost času. Tohle je výhoda sigwait(), že takové problémy se nemusejí vůbec řešit.
    Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
    7.12.2006 00:37 trekker.dk | skóre: 72
    Rozbalit Rozbalit vše Re: Rozhraní pro události
    Vypadá to pěkně - někdy se na to podívám podrobněji. Navíc obsluhy signálů jako takové se týká jenom malá část kódu, takže by to neměl být problém změnit.

    Díky za informace.
    Quando omni flunkus moritati

    Založit nové vláknoNahoru

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