jak byste cvičil souběžnost a vícevláknové zpracování?
<p>četl jsem o souběžnosti, víceprocesovém zpracování a jak <a href="http://www.gotw.ca/publications/concurrency-ddj.htm">„bezplatný oběd skončil“</a> . ale ještě jsem neměl možnost použít mt ve své práci).</p><p>hledám tedy návrhy, co bych mohl udělat, abych si trochu procvičil cpu cpu mt prostřednictvím cvičení nebo účasti na některých open-source projektech.</p><p>dík.</p><p>úpravy: mám větší zájem o projekty s otevřeným zdrojovým kódem, které používají mt pro úlohy vázané na cpu), nebo prostě algoritmy, které je zajímavé implementovat pomocí mt, spíše než knihy nebo papíry, které popisují pouze nástroje, jako jsou vlákna, mutexy a zámky, nebo jak lze mt) použít k vytvoření responzivních gui ...</p>
<p>kapitola 11 knihy <a href="http://rads.stackoverflow.com/amzn/click/0596514808">intel threading building blocks</a> autor james reinders se věnuje příkladům algoritmů a projektů, které využívají <a href="http://en.wikipedia.org/wiki/parallel\_computing">parallel computing</a> (nebo parallel programming): finder podřetězců, game of life, sieve of eratosthenes, matrix multiply a další pokročilejší témata, jako je filtrování síťových paketů a hry.</p>
Takže jste se ptali, jak zvládnout práci na násobku „úkolů“ najednou, ne? S výjimkou větvení.


Můžete mít více checkouts ze zdroje na lokálním počítači, suffixing název adresáře s názvem lístku, na kterém pracujete. Jen se ujistěte, aby se změny ve správném adresáři, v závislosti na úkolu ...


Směšování více úkolů v jedné pracovní kopii / commit může být velmi matoucí, zvláště pokud někdo potřebuje, aby svou práci zkontrolovat později. Myslím, že mohu odpovědět na mou vlastní otázku. Byl jsem poukázal na [Starksoft .NET GnuPG Component](http://web.archive.org/web/20111219021439/http://www.starksoft.com/prod_openpgp.html) - volné knihovny, která bere v interakci s GPG na sebe. Vypadá to, že to funguje, i když se zdá, že projekt bude neudržuje na chvíli.


UPD: složka se zdá být nyní k dispozici jako balíček na nuget <https://www.nuget.org/packages/starksoft.aspen> Myslíš vyvíjet? Jdi na nějakej prestižní gympl, tam se naučíš učit se a nebýt frustrovaný z matiky. Pak jdi na ČVUT nebo VUT na obory, kde se zabývají vývojem součástek. A potom jít třeba na rok na zkušenou do USA na MIT. To je ta horší varianta.Lehčí je ta, nechat si přeoperovat oči, močit proti větru a emigrovat na Taiwan nebo do Číny (nic proti asiatům). ![](/Client.Images/smileys/1.gif) Tam jsou na to přímo speciální obory, kde se zabývají komplet vývojem a materiály. Jasně - když se načítá plocha, spusť správce úloh (Ctrl+Alt+Del) a podívej se, jaký proces právě využívá CPU Tato otázka již Zdá se, že je třeba řešit [zde](https://stackoverflow.com/questions/1700141/c-strings-library "tady") .


Vlastně jsem napsal poněkud zdlouhavý odpověď (doporučující glib a za zmínku, že Lua od 5.0 MIT, není BSD), ale můj stroj zřítil na půli cesty přes :( Velmi doporučuji při pohledu na [tweejump](http://github.com/haqu/tweejump) . Je to v podstatě open source verze hry jako Doodle Jump. Je to opravdu mi pomohl naučit se používat akcelerometr k ovládání objektu na obrazovce.


I když jste řekl, že jste nechtěl žádné herní motory, to *je* poháněn knihovny Cocos2d. Nicméně, Cocos2d je napsáno v Objective-C, takže by neměl být žádný problém dostat něco poháněn Cocos2d prošel Apple.


Hodně štěstí! Pleteš páté přes deváté... Zdrojový kód a strojový kód jsou dvě naprosto nesouvisející věci. A když z toho máš v hlavě bordel, tak to prostě nečti. Každý na tohle hlavu nemá, tak to nech těm, co ji mají ty se věnuj tomu, na co hlavu máš. Není to žádná ostuda :) Zkus registry procesorů, nebo velmi osvědčeným tématem jsou přerušení. Jediným důvodem, proč jsem nechtěl používat `ThreadPool`levnou multithreading je, když potřebuji ...


1. interract s metodou chodu (např zabít to)
2. spustit kód na [podproces STA](http://msdn.microsoft.com/en-us/library/system.stathreadattribute.aspx "Single-Threaded Apartment nit;  viz např tohoto referenčního stránce MSDN STAThreadAttribute") (to se mi stalo)
3. udržet nit živý po mé žádosti zemřel ( `ThreadPool`závity jsou na pozadí nitě)
4. v případě, že musím změnit prioritu závitu. Nemůžeme měnit prioritu nití ThreadPool která je ve výchozím nastavení Normal.



> 
> **PS:** Tento článek MSDN [*„Managed Thread Pool“*](http://msdn.microsoft.com/en-us/library/0ka9477y.aspx "Managed Thread Pool (stránky na webu MSDN)") obsahuje oddíl s názvem *„Kdy nepoužít Thread Pool příze“* , s velmi podobným, ale o něco více kompletní seznam možných důvodů nepoužívá vlákno bazén.
> 
> 
> 


Existuje spousta důvodů, proč byste museli přeskočit `ThreadPool`, ale pokud je neznáte, pak `ThreadPool`by mělo být dost dobré i pro vás.


Alternativně, podívejte se na nový [rámec Paralelní rozšíření](http://www.microsoft.com/downloads/details.aspx?FamilyID=e848dc1d-5be3-4941-8705-024bc7f180ba) , která má nějaké úhledné věci tam, které mohou vyhovovat vašim potřebám, aniž by museli používat `ThreadPool`. Upřímně řečeno, já bych jít s sestavení .NET, jak se zdá být jednodušší řešení a těsněji obsahoval řešení, než zahájit nový proces. Některé z důvodů, proč jsem pocit, že způsob, jakým jsou tyto:


1. S nástrojem příkazového řádku, že jste na trh nový proces. Takže je to zcela samostatný proces ID běh a bude probíhat mimo rozsah a aplikační domény vaší stávající aplikace. Veškerá komunikace mezi aplikací a procesu bude přes hranice procesu a bude muset být provedeno buď s telefonem, jakési sdílené paměti, nebo nějaký jiný přístup, který by mohl být těžkopádný (zejména při řešení otázek).
2. Se zahájením nového procesu, jste v podstatě ztratí kontrolu nad tímto procesem z vaší aplikace. Pokud vaše aplikace zemře nebo se vypne, budete muset tento proces výslovně zabít - jinak budete muset úchyty zůstat otevřené soubory uzamčeny, atd.
3. Včetně sestavení .NET v aplikaci umožňuje vše spustit ve stejném kontextu (obecně), který umožňuje lepší komunikaci mezi složkami, snadnější ladění a odstraňování poruch (obecně), a jediný způsob je řízena.
4. Máte trochu větší kontrolu nad kódu. Zahájení procesu je v podstatě black-box - nemáte ponětí, co se děje uvnitř ní. Je pravda, že se sestavení .NET máte podobný black-box scénář, ale vzhledem k tomu, že je ve stejném procesu, může mít nějaké další vhled do toho, jak jsou hovory byly provedeny, kde jsou výjimky být hozen, atd. V podstatě mít trochu větší vhled do složky s sestavení .NET spíše než zahájit nový proces.


To jsou jen některé myšlenky z vrcholu mé hlavy. Doufám, že to pomůže. Máte-li dotazy, dejte mi vědět a já vám zpracovat mé odpovědi. Hodně štěstí!!