Programování

Vlákna Java: Srovnávací recenze knih

Od prvních vydání Vlákna Java od O'Reillyho a Souběžné programování v Javě z Addison-Wesley vyšel před několika lety, doporučuji je lidem, kteří se chtějí naučit používat vlákna. S několika konkurenčními knihami a druhým vydáním originálů, které jsou nyní k dispozici, jsem se rozhodl přehodnotit svá doporučení. V tomto článku se podívám na šest nejnovějších knih o programování podprocesů Java.

Šest recenzovaných knih je:

  1. Vlákna Java, druhé vydání, Scott Oaks a Henry Wong (O'Reilly)
  2. Souběžné programování v Javě, druhé vydání, Doug Lea (Addison-Wesley)
  3. Zkrocení vláken Java, Allen Holub (Apress)
  4. Programování podprocesů Java, Paul Hyde (Sams)
  5. Vícevláknové programování s technologií Java, Bil Lewis a Daniel Berg (Prentice Hall, Sun Press)
  6. Vysoce výkonné Java Platform Computing: multithreadové a síťové programování, Thomas Christopher a George Thiruvathukal (Prentice Hall, Sun Press)

Níže uvedená tabulka poskytuje rychlý přehled hlavních charakteristik šesti knih.

Všechny knihy jsou založeny na verzi 1.2.x platformy Java 2.
Přehled knih vláken
 Vlákna JavaSouběžné programováníZkrocení vláken JavaProgramování podprocesů JavaVícevláknové programováníVysoce výkonná Java
Cena2.959.954.954.999.999.99
Celkový počet stránek320410300510460410
CD-ROM / Zdroj z webuŽádné anoŽádné anoŽádné anoŽádné anoŽádné anoŽádné ano
Základy závitůVynikajícíVeletrhŽádnýVynikajícíVynikajícíVeletrh
TechnikyVelmi dobřeDobrýVelmi dobřeVynikajícíDobrýVelmi dobře
Designové vzoryŽádnýVynikajícíChudýŽádnýŽádnýDobrý
Měřítko: Žádné, Špatné, Průměrné, Dobré, Velmi dobré, Vynikající

Tabulka by měla být zcela vysvětlující až po atribut CD-ROM. Dovolte mi dále vysvětlit několik posledních řádků:

  • Atribut Thread Basics udává, do jaké míry knihy popisují, co je vlákno a jak jej používat: popis Vlákno třída a Spustitelný rozhraní, Objekt metody Počkejte(), oznámit(), a notifyAll ()a synchronizované klíčové slovo.
  • Atribut Techniques hodnotí, jak dobře knihy prozkoumávají techniky při používání vláken.
  • Atribut Design Patterns měří vysvětlení knih o tom, jak vytvořit programování na základě vláken podle přesně definovaných vzorů návrhu.

Dále přezkoumám každou knihu. Vedle názvu každé knihy je hvězdičkové hodnocení, založené na oblasti pokrytí vláken, na které se tato kniha prohlašuje, že se zaměřuje, nejen průměr ze tří výše uvedených atributů. Jedna hvězda označuje špatnou práci; nejvyšší hodnocení (pět hvězdiček) označuje výjimečné pokrytí.

Vlákna Java

První vydání Java vlákna, Scott Oaks a Henry Wong, byl původním definitivním zdrojem pro učení programování pomocí vláken. Zatímco většina úvodních knih se zabývala tím, co je vlákno a jak používat Vlákno třída s Spustitelný rozhraní, Vlákna Java poskytl další informace nezbytné k jejich efektivnímu využití. Druhé vydání jde ve stopách: obsahuje aktualizované informace o používání vláken s platformou Java 2, informace o zastaralých API, přerušení I / O a změny zabezpečení Java 2. Kniha také pokrývá problémy multithreadingu se sadou komponent Swing a poskytuje nápovědu s podporou nativního plánování a prací s víceprocesorovými stroji.

Pokud jste v programování v Javě nováčkem a ještě jste dobyli vlákna, Vlákna Java je vynikajícím zdrojem. Získáte pohled na základy Java threadingu a naučíte se techniky potřebné k tomu, aby vaše programy správně fungovaly ve světě s více vlákny.

Souběžné programování v Javě

Zatímco Vlákna Java vysvětluje podrobnosti na nízké úrovni používání Threads API, Souběžné programování v Javě, Doug Lea zkoumá správný design vícevláknových programů. Znalost používání API není ve světě Java dostatečná; měli byste také věnovat čas a energii, abyste dosáhli správného návrhu programu. V tomto světle Souběžné programování je hlavně kniha návrhových vzorů. Vzhledem k určitému problému můžete vyhledat vzor definovaný v knize a váš program se prakticky sám zapíše.

Souběžné programování je rozdělena do čtyř oblastí, které popisují různé vzorce použití. Sekce „Souběžné objektově orientované programování“ vás seznámí se základy. Sekce „Vyloučení“ popisuje vzorce pro používání souboru synchronizované klíčové slovo. "Závislost na státu" zkoumá problémy a vzorce pro používání Počkejte(), oznámit(), a notifyAll () metody Objekt třída. Poslední část „Vytváření vláken“ je o vzorcích pro použití Vlákno třída.

Tato kniha rozhodně vyhovuje pokročilým uživatelům a není pro slabé povahy. Očekává se, že budete mít dobrý přehled o objektově orientovaném programování a programovacím jazyce Java a že vám bude chybět pouze v oblasti navrhování programů pro problémy se souběžností. Kromě knihy Lea bezplatně zpřístupňuje knihovnu util.concurrent na webových stránkách knihy. (Odkaz najdete v Zdrojích.) Knihovna vám pomůže navrhnout a vyvinout vícevláknové programy.

Zkrocení vláken Java

Allena Holuba Zkrocení vláken Java, vznikl zde v JavaWorld jako devítidílná řada Java Toolbox. Články byly od té doby aktualizovány a nyní tvoří obsah knihy, spolu se zajímavou novou kapitolou, která popisuje problémy s Java Threading API. (Viz Zdroje pro odkaz na tuto část s názvem „Kdybych byl králem.“) Zkrocení je na rozdíl od prvních dvou knih, které jsem recenzoval; jde výhradně o techniky správného používání API. Není to úvod do vláken nebo kniha návrhových vzorů. K dispozici je také knihovna kódů (viz Zdroje pro odkaz), abyste mohli využít toho, co jste se naučili. Nezapomeňte si přečíst licenční smlouvu; není public domain ani open source.

Po popisu základní architektury vícevláknového modelu Java vysvětluje Holub nebezpečí používání vláken a techniky jejich bezpečného používání. Naučíte se vytvářet a používat mutexy, semafory a podmíněné proměnné. Seznámíte se s rozdíly mezi Swingovými invokeLater () a invokeAndWait () metody. Holub také zkoumá AWTEventMulticaster třídy a ukazuje, jak je to bezpečné pro vlákna s minimální režií a jak můžete pracovat s fondy vláken. Koneckonců je vše řečeno a hotovo, budete mít vynikající přehled o omezeních a použití modelu vláken Java.

Byl jsem překvapen, když jsem viděl některé technické chyby v knize - v předmluvě, neméně - ale to neubralo na vynikajících informacích, které kniha nabízí. Poté, co jsem neustále viděl kód Java naformátovaný smíšeným písmem, byl jsem však trochu překvapen, že Holubův kód byl naformátován znakem podtržítka mezi slovy v proměnných a názvech metod. Možná budete muset několikrát přečíst bloky kódu, než jim plně porozumíte, ale kvalita zde poskytovaných informací stojí za nepříjemnosti. Jedna poznámka na závěr: celý zdrojový kód je plně komentován javadocem.

Programování podprocesů Java

Programování podprocesů Java, Paul Hyde, přímo soutěží s Vlákna Java. Jasně se zaměřuje na začínajícího vývojáře a zahrnuje další pokrytí pokročilejších témat a technik, kdy tento vývojář „vyroste“. Tato kniha je největší ze skupiny a prostor je dobře využit.

První polovina roku Programování podprocesů Java vysvětluje, co jsou vlákna a jak pracovat se základy. Získáte typický popis vytváření vláken a používání Spustitelný rozhraní. Existuje kapitola o tom, jak zastavit vlákna, včetně toho, jak je pozastavit a obnovit bez použití zastaralých metod - pěkné techniky pro zvýšení produktivity. Kromě krytí Počkejte() a oznámit(), Hyde podrobně popisuje nestálý klíčové slovo a komunikace mezi vlákny přes I / O kanály. Programování podprocesů Java má také nejlepší pokrytí ThreadLocal a InheritableThreadLocal třídy, kromě obvyklého pokrytí vláken a Swingu, které najdete v jiných knihách.

Část 2 z Programování podprocesů Java popisuje techniky pro práci s vlákny Java. Nabízí nejlepší pokrytí sdílení vláken a skvělou kapitolu o vyřazení blokovaných I / O. Z tohoto výběru nebudete zklamáni.

Vícevláknové programování s technologií Java

Zdá se, že vždy najdu alespoň jednu knihu, která není úplně jako ostatní - Vícevláknové programování s technologií Java, Bil Lewis a Daniel Berg, je takové zvíře. Stále jsem mu dal hodnocení hvězdičkami, ale tato kniha si zaslouží zvláštní zmínku. Dle mého názoru, Programování s více vlákny 'Primárním účelem není naučit vás programovat pomocí vláken v Javě. Pomůže vám v této oblasti, ale zdá se, že jeho hlavním účelem je naučit vás, jak funguje architektura podprocesů podprocesů, a to jak v rámci Java Virtual Machine (Java VM), tak v podkladových operačních systémech. Ve skutečnosti získáte nejen mnoho příkladů kódu knihy v kódu Java, ale také získáte POSIX kód a kód pro zpracování podprocesů Win32 API. Pokud by na konci každé kapitoly byla čtenářská cvičení, fungovalo by to dobře jako vysokoškolský text.

To znamená, jak dobře to jde Vícevláknové programování vás naučí používat vlákna? Nejvíc se to podobá Vlákna Java; jeho hlavním cílem je naučit vás, co je vlákno a jak jej používat. Ukazuje také, jak vše pod kapotou funguje v prostředí Java VM, jak je vše naplánováno v prostředí Java VM atd. Kromě toho získáte pokrytí typických témat vláken, jako je synchronizace, zablokování a podmínky závodu. Lewis a Berg dokonce pokrývají problémy vláken pomocí RMI a optimalizačních technik pro zlepšení výkonu. Celkově vzato je to dobrá kniha - prostě ne vaše typická prezentace vláken Java.

Pokud jde o příklady z knihy, dejte si pozor na Elvise, který byl chycen UFO.

Vysoce výkonná platforma Java

Ohlášení s nejdelším titulem je Vysoce výkonná platforma Java: Výpočetní a síťové programování, Thomas Christopher a George Thiruvathukal. Dokonce i příjmení autorů jsou minimálně dvojnásobná oproti délce jejich konkurence! Přebytek tím nekončí; tato kniha také stojí o více než 25 procent více než ostatní.

Dost venku - co je uvnitř? Vysoký výkon skočí přímo do diskuse o paralelních výpočtech. Dozvíte se o von Neumannově stroji, Flynnově taxonomii, lineárním zrychlení a Amdahlově zákoně, vše v kapitole 1. Kapitola 2 zkoumá vytváření podprocesů hlouběji než většina úvodů do API. Po předvedení podmínek závodu popisuje kapitola 3 synchronizaci a proč ji potřebujete. Kapitola 4 se hlouběji věnuje monitorům s mnoha variantami problémů se zámkem čtečky a zapisovače. V kapitole 5 autoři diskutují o použití sdílené paměti - na hromadě, nikoli o unixové odrůdě systému - vše za účelem vytvoření fondu vláken. Zbytek knihy pokrývá vzory pro vývoj aplikací pro paralelní provádění.

O paralelních výpočtech je zde spousta dobrých informací, ale Vysoký výkon'Cílem není ve skutečnosti učit programování podprocesů pro všeobecné účely. Vypadá to, že je vyvíjen hlavně jako text pro kurz paralelních výpočtů - každá kapitola končí sérií promyšlených cvičení, na která se mi nepodařilo najít žádné odpovědi.

Doporučuji to samé?

První vydání Souběžné programování v Javě a Vlákna Java vyšlo v roce 1997 a bylo velmi doporučeno. Doporučuji jen slepě jejich druhá vydání? Stručně řečeno, zdá se, že Lea Souběžné programování je stále vynikajícím zdrojem pro ty, kteří se učí navrhovat programy pro vícevláknový svět. Není to snadné čtení, ale designové vzory a techniky vysvětlené v knize jsou vynikajícími nástroji pro seriózní vývojáře Java.

Na druhou stranu se to zdá Vlákna Java byl následován Samsem Programování podprocesů Java jako nejlepší kniha pro začátečníky. S nabídkou O'Reilly není nic technicky špatného, ​​ale Programování podprocesů Java funguje lépe jako úvod do vláken Java. Hyde dokonce jde nad rámec úvodního materiálu a nabízí pokročilejší techniky navíc.

Pokud máte první vydání Vlákna Java a Souběžné programování v Javě, stojí za to získat aktualizace? Možná bych doporučil dostat druhé vydání Lea a předat ho dál Vlákna Java. Pokud máte první vydání Java vlákna, pravděpodobně jste se nyní posunuli nad rámec potřeby druhého. Pokud stále potřebujete úvodní text, vyzvedněte si Sams Programování podprocesů Java namísto.

Co dělat se zbytkem? Je to opravdu těžké volání a záleží na tom, čí desetník utratíte. Kdybych mohl získat jen jednu další knihu vláken, vybral bych si Vícevláknové programování s technologií Java. Jeho pokrytí vláken je jedinečné a dostatečně užitečné, aby se stalo pěkným doplňkem knihovny. Holub Zkrocení vláken Java obsahuje některé pěkné techniky pro maximální využití programování vláken. Nejsem si však jistý, zda je to nezbytný zdroj. Vysoce výkonná výpočetní platforma Java se zdá vhodné pro zájemce o svět paralelních počítačů. Jinak bych to nechal na polici.

John Zukowski je nezávislý konzultant v Javě, autor publikací Definitive Guide to Swing for Java 2, Second Edition od Apress, Mastering Java 2 od Sybex a Java AWT Reference od O'Reilly, stejně jako průvodce About's Focus on Java.
$config[zx-auto] not found$config[zx-overlay] not found