C nebo Rust?

borekz

  • ****
  • 492
    • Zobrazit profil
    • E-mail
Re:C nebo Rust?
« Odpověď #15 kdy: 11. 09. 2018, 19:30:43 »
moje pouziti by byla vicevlaknova extrakce dat z velkeho mnozstvi webovych zdroju napr za pouziti xpath...muj cil je co nejnizsi cpu zatez a memory footprint
To jde trochu proti sobě. Nejnižší cpu zátež a memory footprint docílíš s jednoprůchodovým parserem - SAX a ne s xpathem. Ale pokud trváš na xpath, zkusil bych C++ a pugixml.


unicode

Re:C nebo Rust?
« Odpověď #16 kdy: 11. 09. 2018, 19:59:31 »
Pokud zpracováváš hodně dat a chceš max výkon tak C++ a k tomu nějaký Arena alokátor by mohla být dobrá kombinace. Já bych první verzi něčeho takového zbastlil v node.js - scaling je built-in a C++ addon pro nouzové případy se dá napsat snadno - těžko říct jestli bych chtěl komplet věc dělat v C++.

kozzi11

Re:C nebo Rust?
« Odpověď #17 kdy: 12. 09. 2018, 00:00:14 »
Pokud zpracováváš hodně dat a chceš max výkon tak C++ a k tomu nějaký Arena alokátor by mohla být dobrá kombinace. Já bych první verzi něčeho takového zbastlil v node.js - scaling je built-in a C++ addon pro nouzové případy se dá napsat snadno - těžko říct jestli bych chtěl komplet věc dělat v C++.

Presne proto casto preferuji dlang, programovani v nem je velmi pohodlne (pro mne i vice nez v js) a vykon shodny s C++. Ne ze bych mel neco proti kombinaci vice jazyku, ale pokud muzu tak preferuji vse napsat jen v jednom.

Zlatovlaska

Re:C nebo Rust?
« Odpověď #18 kdy: 12. 09. 2018, 00:18:40 »
Scrapovaci aplikace v C nebo Rust? To je honirna.

Mas to jako hobby projekt, negeneruje ti to zisk ani se nechystas, tzn. mas malej budget a mas hodne casu? Jo nauc se rust, stejne to mas jako zaminku se ho naucit.

Nebo to generuje penize? Tak kup X ec2 instanci boha jeho kolik je libo.

Python neumi uvolnovat pamet? Bud ti leakuje knihovna nebo ty neumis uvolnovat pamet. Jestli mas cas tak se nejdriv nauc radsi poradne python.

Dobry by bylo sdelit jestli ti jde vic o to aby ti fungovala ta aplikace nebo abys mel duvod se neco novyho naucit a hodit si to do cv.

Nekdo tady zminoval 100000 vlaken v jave. To mas tolik jader na cpu kamo? Nauc se rozdil mezi paralelismem a konkurenci.

Na stahovani ti postaci jeden az par python procesu na hodne slaby masine s asyncio nebo jinym green threadingem. Procesovani dat pak posli do jinyho systemu, kterej pouzije tolik vlaken kolik mas jader.

Miroslav Hančík

Re:C nebo Rust?
« Odpověď #19 kdy: 12. 09. 2018, 08:28:28 »
To zní jako úloha pro Go. Jinak D(lang) nebo Rust by šli nejspíš taky, ale nejvíc se mi tam skutečně hodí to Go.


oss

Re:C nebo Rust?
« Odpověď #20 kdy: 12. 09. 2018, 08:40:17 »
Jednoznacne java/C# v tychto jazykoch je to bezstarostne a bezbolestne, v C aj Rsute to bude viac trapenia.

andy

Re:C nebo Rust?
« Odpověď #21 kdy: 12. 09. 2018, 12:14:34 »
Python neumi uvolnovat pamet? Bud ti leakuje knihovna nebo ty neumis uvolnovat pamet. Jestli mas cas tak se nejdriv nauc radsi poradne python.
Co jsem pochopil, tak problém je, že nevrací paměť OS (dělá se to přes madvise, myslím). Což může být trochu problém, pokud je to long-running process se špičkama a na tom stroji běží i něco jiného třeba v jiné časy. Druhá otázka je, jestli to fakt je problém a autorovi jenom nevadí číslo v "top"u.

Jinak já bych na to klidně použil Haskell... paměť OS to pokud vím vrací (akorát brk to má udělaný na 1TB, ale to ničemu nevadí), paralelismus je easy, celý se to zkompiluje do jedný binárky, která nabíhá velmi rychle. Standardem jsou green-thready běžící na OS-threadech podle počtu corů, celý to je async, ale jako programátor jsi od toho odstíněný a normálně píšeš synchronní kód. Vzhledem k tomu, že tady je typicky bottleneck síť tak budeš chtít mít jeden thread na spojení, hodně otevřených spojení.

Vůbec netuším, jak se to dneska řeší v Javě/C++/Rustu. Java pokud vím green-thready nepodporuje, C++ taky ne a Rust má nějaké futures? Python má nějaké korutiny... Nebo je dneska podpora OS na úrovni, že není potřeba o rozdílu mezi user-process threadama a OS threadam uvažovat?

avc

Re:C nebo Rust?
« Odpověď #22 kdy: 12. 09. 2018, 13:35:04 »
Skusil by som C++ s tymto http://seastar.io/

Youda

Re:C nebo Rust?
« Odpověď #23 kdy: 12. 09. 2018, 14:59:03 »
Na tyhle typy uloh je primo delane GO.
Kazdy jednotlivy crawler do masivniho poolu gorutin (klidne 1000 palalelnich crawleru), prametry predavat input channelem, vysledky serializovat zase v output channelu.

Dokonce i ty jednotlive crawlery muzes rozparalelizovat do pipelines propojenych channely:
https://blog.golang.org/pipelines

A pokud i tohle by bylo malo, jednoduse pomoci NATS message busu to rozfrcas na vice masin, kazdy poresi balik vstupnich dat.

Ale drive nez zacnes, chce to overit, jestli v GO zvladnes ten XPATH search a podobne serepeticky, tedy nejprve jedoduchy PoC, ktery udela jede seriovy crawler, rozmlatit to do gorutin udelas pozdeji jednoduse, to je hlavni vyhoda a krasa GO.

A pokud to nepude, jako safe reseni bych zvolil Jawu, tam pude vsechno, akorat krapet systemove nenazrane, a mozna to bude i rychlejsi nez GO.

C/C++ je pro tenhle typ uloh sebevrazda, 80% casu budes resit okolostojicnosti typu hlidani threadu a memory alokaci, v GO nebo Jave nebudes resit vubec nebo jednoduseji.

Youda

Re:C nebo Rust?
« Odpověď #24 kdy: 12. 09. 2018, 15:01:08 »
Apropos, Oracle slibuje pridat korutiny do Jawy. Az to tam bude -> one jawa rules them all.

Inkvizitor

Re:C nebo Rust?
« Odpověď #25 kdy: 12. 09. 2018, 15:33:05 »
Apropos, Oracle slibuje pridat korutiny do Jawy. Az to tam bude -> one jawa rules them all.

Az clovek premysli, jak mohlo lidstvo tak dlouho zivorit bez korutin. Hrozne.

Youda

Re:C nebo Rust?
« Odpověď #26 kdy: 12. 09. 2018, 16:30:03 »
Apropos, Oracle slibuje pridat korutiny do Jawy. Az to tam bude -> one jawa rules them all.

Az clovek premysli, jak mohlo lidstvo tak dlouho zivorit bez korutin. Hrozne.

Ano.
Z nedostatku vitaminu C vznikaji kurdeje.
A z nedostatku korutin vzniklo Node.js

Zlatovlaska

Re:C nebo Rust?
« Odpověď #27 kdy: 12. 09. 2018, 16:51:28 »
C C++ - presprilis

java - lepsi, ale zbytecny. nema green threading. na tyhke veci hnus

go - ma green threading, ale je staticky typovanej = jakmile pracujes s json objektama tak se z toho poblijes

python - ma green threading, ma rychly parsovani xmlek s xpath pres lxml

python asyncio je mechanismus jak pouzivat green threading v synchronnim kodu, tzn. zadny spagety a callback hell.
pro tyhle aplikace nema smysl pouzivat nic jinyho. Dobra knihovna na praci s http je aiohttp.

Nerikam ze neexistuje neco lepsiho, ale dosavadni navrhy tady ve vlaknu pochazi od lidi, co v tomhle nemaji zkusenosti.

ajaj

Re:C nebo Rust?
« Odpověď #28 kdy: 12. 09. 2018, 18:35:33 »
u Pythonu to leakovani nemusi byt nutne diky spatnemu kodu  https://doc.scrapy.org/en/latest/topics/leaks.html#leaks-without-leaks

Bacsa

Re:C nebo Rust?
« Odpověď #29 kdy: 13. 09. 2018, 00:31:28 »
muj cil je co nejnizsi cpu zatez a memory footprint [...] popr. muzete doporucit i jiny jazyk
Cokoliv s NIO a korutinami - malý memory footprint bude mít C++, Rust i Go.