Realizace seznamu souborů ve frontě – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Realizace seznamu souborů ve frontě – C / C++ – Fórum – Programujte.comRealizace seznamu souborů ve frontě – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
oxidián0
Věrný člen
5. 3. 2015   #1
-
0
-

Chci načíst seznam souborů v adresáři do fronty (queue) pomocí C a uvažují jak to co nejefektivněji zrealizovat, vzhledem k tomu že dělám multivláknovou aplikaci. Nejdříve jsem myslel udělat jedno pole představující frontu s názvy souborů, což by byl typ char * [256]. Vlákno by si našlo v poli soubor, který chce zpracovat, pak ho odtama vyňalo ('�') a zapsalo do seznamu prázdných indexů (uint32_t * i) že daný index je volný. Mezi tím jiná procedůra která průběžně načítá (nové) soubory z adresáře by ten index/soubor mohla zase doplnit (zkopírovat název soubor a vyjnout index se seznamu prázdných indexů).

Ale napadla mě ještě druhá možnost, a to že bych vytvořil, pro každé vlákno jednu frontu, takže například 8 jádrový procesor by mohl mít 8 nebo 16 front (a taky tolik seznamů prázdných indexů). Proces načítání souborů by jednoduše rozděloval soubory mezi těchto 16 front. 16 souborů by se rozdělilo na 16 front po jednom souboru a seznamy indexů budou mít kratší délku tím pádem se to rychleji projede. Čím méně souborů tím rychleji to bude ne? Vlákno které potřebuje soubor ke zpracování a nemělo by nic ve svém vlastním vlákně, by se podívalo do jiného vlákna, odkud by mohlo vzít soubor a informovat seznam volných indexů o tom, že daný index je opět prázdný. Představa je taková, že by takto mohla stačit délka 16, čímž by se v jednom okamžiku mohlo načíst až 15*16 souborů (jedno vlákno musí být vyhrazené na načítání souborů adresáře a na kontrolu názvů souborů).

Myslíte že je to takhle dobrý nápad, případně máte nějaké typy? Teprve s tím začínám tak by mě zajímalo jestli je to dobrý koncept.

Nahlásit jako SPAM
IP: 78.45.199.–
Reklama
Reklama
q
~ Anonymní uživatel
219 příspěvků
5. 3. 2015   #2
-
0
-

Kolik času to procházení podle tebe zabere, že to stojí za zrychlování?

Udělej to jako normální frontu - přidávání na konec, odebírání ze začátku. Žádný seznam volných indexů nepotřebuješ.

Nahlásit jako SPAM
IP: 78.156.159.–
KIIV+42
God of flame
5. 3. 2015   #3
-
0
-

Zamek by to ale sneslo. Respektive semafor, jedna fronta a par workeru.

Nahlásit jako SPAM
IP: 94.113.95.–
Program vždy dělá to co naprogramujete, ne to co chcete...
oxidián0
Věrný člen
5. 3. 2015   #4
-
0
-

Tak snažím se maximalizovat výkon úplně na max co to jde. Zdá se mi to jako dobrý nápad protože je to přehlednější.

Ten semafor tam byt musi, ještě jsem s tím ale nedělál tak snad na to příjdu jak na to.

Dotaz na načítání seznamu souborů v adresáři:

Ještě jsem se chtěl zeptat na to procházení souborů. Jak to vlastně přesně funguje? Když otevřu adresář a čtu jednotlivé soubory mám pointer na soubor. Co ale když přidám nové soubory? Ty mají automaticky vyšší hodnotu pointeru? A co když vymažu ty soubory, které jsem zpracoval? Pokud bych chtěl v adresáři udržovat 16 souborů (vždycky tam nahraju nezpracované soubory a ty hotové mohu přesunout nebo vymazat), tak stačí pokračovat v té smyčce na načítání seznamu nebo bych musel pokaždé znovu restartovat smyčku načítání tedy načítat od začátku? Je tam něco jako "rewind" nebo jak bych to měl dělat?

A ještě dotaz k té smyčce ve vláknu která bude kontrolovat jestli je ve frontě nějaké místo volné - když bych tam dal normální smyčku tak nebude to příliš vytěžovat procesor/jádro jako že to vytíží jádro na 100% a druhé vlákno už nebude schopno využít výkonu toho jádra? Ptám se jestli by tam nemělo být něco co tu smyčku zpomalí nějaký příkaz na sleep(ms) nebo wait(ms) nebo tak něco....

Nahlásit jako SPAM
IP: 78.45.199.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 70 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý