<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Dariusz quatscht : Concurrency</title><link>http://blogs.msdn.com/dparys/archive/tags/Concurrency/default.aspx</link><description>Tags: Concurrency</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Nachtrag zum TechTalk: Parallel Computing mit Visual Studio 2010</title><link>http://blogs.msdn.com/dparys/archive/2009/07/16/nachtrag-zum-techtalk-parallel-computing-mit-visual-studio-2010.aspx</link><pubDate>Thu, 16 Jul 2009 09:38:43 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9835201</guid><dc:creator>dparys</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/dparys/comments/9835201.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dparys/commentrss.aspx?PostID=9835201</wfw:commentRss><wfw:comment>http://blogs.msdn.com/dparys/rsscomments.aspx?PostID=9835201</wfw:comment><description>&lt;p&gt;Durch 6 Städte habe ich zusammen mit Dr. Mario Deilmann von Intel das Thema Multi-Many-Core Programmieren mit Visual Studio 2010 und dem Intel Parallel Studio vorgetragen. Hierbei haben wir die Themen TPL, PPL, AAL, TBB, Open MP,CT und Tooling angerissen. Wir hatten viel Feedback direkt bekommen und jeder Ort hatte seine besonderen Gegebenheiten. So möchte ich nochmals &lt;a href="http://blogs.msdn.com/twendel/"&gt;Tom Wendel&lt;/a&gt; dafür danken das er in Karlsruhe meine geschundenen Finger geschont hat und für mich den Tippaffen gemacht hat. So möchte ich darauf hinweisen das Berlin den größten Anteil an C++ Entwicklern hatte was natürlich Mario sehr gefreut hat. Und mir persönlich hat es in Dresden am besten gefallen. Nicht nur weil es dort einen guten Spanier mit leckeren Tapas gab und die Altstadt wirklich sehenswert ist, sondern weil in Dresden die No-Show Rate (Teilnehmer die angemeldet waren und nicth gekommen sind) extrem niedrig war.&lt;/p&gt;  &lt;p&gt;Wer nicht dabei gewesen ist, der kann sich die Aufzeichnung aus Hamburg anschauen. Diese ist dreigeteilt. Hier die einzelnen Links:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/germany/msdn/techtalk/videos/library.aspx?id=msdn_de_33301"&gt;Teil 1&lt;/a&gt; mit Dr. Mario Deilmann über Parallel Studio, Open MP und Auto Vektorisierung&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/germany/msdn/techtalk/videos/library.aspx?id=msdn_de_33302"&gt;Teil 2&lt;/a&gt; mit mir über Parallel Computing in Visual Studio 2010 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/germany/msdn/techtalk/videos/library.aspx?id=msdn_de_33303"&gt;Teil 3&lt;/a&gt; mit Dr. Mario Deilmann über Intel Threading Building Blocks und CT&lt;/p&gt;  &lt;p&gt;Das Teil 2 Video habe ich auch noch in diesem Blog Post direkt verlinkt.&lt;/p&gt; &lt;object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="320" height="240"&gt; &lt;param name="source" value="http://channel9.msdn.com/App_Themes/default/vp09_06_22.xap" /&gt; &lt;param name="initParams" value="m=http://mschnlnine.vo.llnwd.net/d1/ch9/3/2/9/8/7/4/ttppldparys_2MB_ch9.wmv,autostart=false,autohide=true,showembed=true, thumbnail=http://mschnlnine.vo.llnwd.net/d1/ch9/3/2/9/8/7/4/ttppldparys_large_ch9.png, postid=478923" /&gt; &lt;param name="background" value="#00FFFFFF" /&gt; &lt;a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;"&gt; &lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none" /&gt; &lt;/a&gt; &lt;/object&gt;  &lt;p&gt;Des Weiteren gibt es jetzt hier auch die &lt;a href="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=dparys&amp;amp;DownloadId=6592"&gt;Code Beispiele&lt;/a&gt; für Visual Studio 2010 Beta 1.&lt;/p&gt;  &lt;p&gt;Noch einige Antworten zu Fragen die mehrere Teilnehmer während der Tour gestellt haben:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;F: In welchen Versionen von Visual Studio 2010 werden die neuen Debugging Funktionalitäten enthalten sein?&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;A: Die Debugger Fenster für Tasks und den Stackwatch werden in allen Versionen für Visual Studio 2010 verfügbar sein, ausgenommen Visual Studio 2010 Express. Der Visual Studio Profiler der nun auch Concurrency profilen kann wird es nur in der Visual Studio 2010 Team System Developer Edition bzw. in der Visual Studio 2010 Team System Suite geben.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;F: Werden die Parallel Extension Extras in die TPL eingearbeitet werden?&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;A: Zum Teil. Es werden nicht alle Beispiele und Klassen den Weg in das Framework finden, welche genau in das Framework wandern ist zur Zeit noch nicht bekannt.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;F: Wird eine Anwendung die die TPL nutzt auch unter Windows XP lauffähig sein?&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;A: Ja, lediglich der Profiler mindestens Windows Vista&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;F: Wird der C++ Compiler in Visual Studio 2010 Auto Vektorisierung unterstützen?&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;A: Momentan wurde diesbezüglich nichts angekündigt.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;F: Ist es möglich zu sehen welche Partitionierungsstrategie die Concurrency Runtime bei PLINQ Queries verwendet und kann ich das beeinflussen?&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;A: Es gibt momentan keine dafür vorgesehene Implementierung. PLINQ ist eine Black Box. Man kann ungefähr abwägen auf Grundlage des Datentyps und der Operationen in der LINQ Query welche Paritionierung verwendet wird. Mehr Informationen zur Partitionierung gibt es in diesem &lt;a href="http://blogs.msdn.com/pfxteam/archive/2009/05/28/9648672.aspx"&gt;Blog Post&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9835201" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dparys/archive/tags/C_2B002B002F00_CLI/default.aspx">C++/CLI</category><category domain="http://blogs.msdn.com/dparys/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Events/default.aspx">Events</category><category domain="http://blogs.msdn.com/dparys/archive/tags/TechTalk/default.aspx">TechTalk</category><category domain="http://blogs.msdn.com/dparys/archive/tags/PLINQ/default.aspx">PLINQ</category><category domain="http://blogs.msdn.com/dparys/archive/tags/C_2B002B00_/default.aspx">C++</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Parallel+Computing/default.aspx">Parallel Computing</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Concurrency/default.aspx">Concurrency</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Visual+Studio+2010/default.aspx">Visual Studio 2010</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Video/default.aspx">Video</category></item><item><title>Was sind relevante Themen in der Softwareentwicklung für Sie?</title><link>http://blogs.msdn.com/dparys/archive/2008/12/03/was-sind-relevante-themen-in-der-softwareentwicklung-f-r-sie.aspx</link><pubDate>Wed, 03 Dec 2008 19:19:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9170644</guid><dc:creator>dparys</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/dparys/comments/9170644.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dparys/commentrss.aspx?PostID=9170644</wfw:commentRss><wfw:comment>http://blogs.msdn.com/dparys/rsscomments.aspx?PostID=9170644</wfw:comment><description>&lt;P&gt;Lange Zeit bevor ich bei Microsoft war, habe ich schon in diversen Firmen eigentlich immer aus eigenem Antrieb heraus recht schnell Technologie adaptiert und auch während laufender Projekte reingebracht. Den Mehraufwand hat man gerne selbst getragen (oder tragen lassen, Entschuldigung schon mal an dieser Stelle, Ihr wisst wer gemeint ist) um das Projekt / Produkt auf eine neue technische Ebene zu heben. Meist hat sich der Aufwand auch gelohnt.&lt;/P&gt;
&lt;P&gt;Seit ich bei Microsoft bin, liegt hier mein Fokus natürlich verstärkt auf die Microsoft Technologie. Ich möchte mal sagen das ich nicht diesen &lt;A href="http://ralfw.blogspot.com/2008/05/microsoftdmmerung.html" mce_href="http://ralfw.blogspot.com/2008/05/microsoftdmmerung.html"&gt;Bias&lt;/A&gt; habe über den Ralf Westphal geschrieben hat, aber mein "Abdriften" in andere Technologie Welten ist definitiv geringer geworden. &lt;/P&gt;
&lt;P&gt;Warum schreibe ich das eigentlich? Ganz einfach, nach dem Auswerten der Technical Summit Feedbacks ist mir aufgefallen das die Themen kaum Relevanz für die Teilnehmer hatten und ich nicht von mir ausgehen möchte was relevant ist. Was ich wirklich Cool finden würde, wären Kommentare was für &lt;STRONG&gt;&lt;EM&gt;Sie relevante Softwareentwicklungsthemen &lt;/EM&gt;&lt;/STRONG&gt;sind.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9170644" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dparys/archive/tags/XPSP2/default.aspx">XPSP2</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Connected+Systems/default.aspx">Connected Systems</category><category domain="http://blogs.msdn.com/dparys/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://blogs.msdn.com/dparys/archive/tags/CodeClips/default.aspx">CodeClips</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Software+Factories/default.aspx">Software Factories</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://blogs.msdn.com/dparys/archive/tags/VPC/default.aspx">VPC</category><category domain="http://blogs.msdn.com/dparys/archive/tags/C_2B002B002F00_CLI/default.aspx">C++/CLI</category><category domain="http://blogs.msdn.com/dparys/archive/tags/HPC/default.aspx">HPC</category><category domain="http://blogs.msdn.com/dparys/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/dparys/archive/tags/WF/default.aspx">WF</category><category domain="http://blogs.msdn.com/dparys/archive/tags/VSTS_2F00_TFS/default.aspx">VSTS/TFS</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Dev+Tools/default.aspx">Dev Tools</category><category domain="http://blogs.msdn.com/dparys/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.msdn.com/dparys/archive/tags/XNA/default.aspx">XNA</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Coding4Fun/default.aspx">Coding4Fun</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Dies+und+Das/default.aspx">Dies und Das</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Conference/default.aspx">Conference</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Web+2.0/default.aspx">Web 2.0</category><category domain="http://blogs.msdn.com/dparys/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Orcas/default.aspx">Orcas</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Vista/default.aspx">Vista</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.msdn.com/dparys/archive/tags/MSDN/default.aspx">MSDN</category><category domain="http://blogs.msdn.com/dparys/archive/tags/MFC/default.aspx">MFC</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Windows+Server/default.aspx">Windows Server</category><category domain="http://blogs.msdn.com/dparys/archive/tags/IIS7/default.aspx">IIS7</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Open+XML/default.aspx">Open XML</category><category domain="http://blogs.msdn.com/dparys/archive/tags/VSTS/default.aspx">VSTS</category><category domain="http://blogs.msdn.com/dparys/archive/tags/SQL+Server+2008/default.aspx">SQL Server 2008</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Events/default.aspx">Events</category><category domain="http://blogs.msdn.com/dparys/archive/tags/WDF/default.aspx">WDF</category><category domain="http://blogs.msdn.com/dparys/archive/tags/TechTalk/default.aspx">TechTalk</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Windows+Live/default.aspx">Windows Live</category><category domain="http://blogs.msdn.com/dparys/archive/tags/.NET+Framework/default.aspx">.NET Framework</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Testing/default.aspx">Testing</category><category domain="http://blogs.msdn.com/dparys/archive/tags/PLINQ/default.aspx">PLINQ</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Tools/default.aspx">Tools</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Data+Access/default.aspx">Data Access</category><category domain="http://blogs.msdn.com/dparys/archive/tags/C_2B002B00_/default.aspx">C++</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Games/default.aspx">Games</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Services/default.aspx">Services</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Virtualization/default.aspx">Virtualization</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Dynamic+Languages/default.aspx">Dynamic Languages</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Windows/default.aspx">Windows</category><category domain="http://blogs.msdn.com/dparys/archive/tags/LINQ/default.aspx">LINQ</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Mein+Senf/default.aspx">Mein Senf</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Parallel+Computing/default.aspx">Parallel Computing</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Concurrency/default.aspx">Concurrency</category><category domain="http://blogs.msdn.com/dparys/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Entity+Framework/default.aspx">Entity Framework</category><category domain="http://blogs.msdn.com/dparys/archive/tags/PDC2008/default.aspx">PDC2008</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Windows+Azure/default.aspx">Windows Azure</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Model+Driven+Development/default.aspx">Model Driven Development</category><category domain="http://blogs.msdn.com/dparys/archive/tags/.NET+Services/default.aspx">.NET Services</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Azure+Services/default.aspx">Azure Services</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Live+Services/default.aspx">Live Services</category></item><item><title>Ich, über die Xtopia und den Technical Summit</title><link>http://blogs.msdn.com/dparys/archive/2008/09/30/ich-ber-die-xtopia-und-den-technical-summit.aspx</link><pubDate>Tue, 30 Sep 2008 14:20:46 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8970148</guid><dc:creator>dparys</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/dparys/comments/8970148.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dparys/commentrss.aspx?PostID=8970148</wfw:commentRss><wfw:comment>http://blogs.msdn.com/dparys/rsscomments.aspx?PostID=8970148</wfw:comment><description>&lt;p&gt;Nachdem mein Kollege &lt;a href="http://blogs.msdn.com/olivers/default.aspx"&gt;Oliver Scheer&lt;/a&gt;, schon eine Reihe anderer Kollegen zur Xtopia und dem Technical Summit befragt hat, habe ich meine Video Kamera genommen und auch meinen Senf abgegeben.&lt;/p&gt; &lt;iframe height="325" src="http://channel9.msdn.com/posts/Dariusz/430416/player/" frameborder="0" width="320" scrolling="no"&gt;&lt;/iframe&gt;  &lt;br /&gt;&lt;a href="http://channel9.msdn.com/posts/Dariusz/Xtopia--Technical-Summit-Dariusz-Parys/"&gt;Xtopia + Technical Summit: Dariusz Parys&lt;/a&gt;  &lt;br /&gt;  &lt;p&gt;Weitere Interviews meiner Kollegen findet man &lt;a href="http://channel9.msdn.com/tags/Xtopia/"&gt;hier auf Channel9&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8970148" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dparys/archive/tags/Connected+Systems/default.aspx">Connected Systems</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://blogs.msdn.com/dparys/archive/tags/C_2B002B002F00_CLI/default.aspx">C++/CLI</category><category domain="http://blogs.msdn.com/dparys/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/dparys/archive/tags/WF/default.aspx">WF</category><category domain="http://blogs.msdn.com/dparys/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Conference/default.aspx">Conference</category><category domain="http://blogs.msdn.com/dparys/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.msdn.com/dparys/archive/tags/MSDN/default.aspx">MSDN</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Events/default.aspx">Events</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Windows+Live/default.aspx">Windows Live</category><category domain="http://blogs.msdn.com/dparys/archive/tags/.NET+Framework/default.aspx">.NET Framework</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Data+Access/default.aspx">Data Access</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Dynamic+Languages/default.aspx">Dynamic Languages</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Mein+Senf/default.aspx">Mein Senf</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Parallel+Computing/default.aspx">Parallel Computing</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Concurrency/default.aspx">Concurrency</category></item><item><title>Velocity – Eine Einführung</title><link>http://blogs.msdn.com/dparys/archive/2008/09/26/velocity-eine-einf-hrung.aspx</link><pubDate>Fri, 26 Sep 2008 09:26:23 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8966027</guid><dc:creator>dparys</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/dparys/comments/8966027.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dparys/commentrss.aspx?PostID=8966027</wfw:commentRss><wfw:comment>http://blogs.msdn.com/dparys/rsscomments.aspx?PostID=8966027</wfw:comment><description>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Velociwas? Codenamen sind bei Microsoft, seit ich diese Firma kenne, Bestandteil der Firmenkultur und werden vermutlich so schnell nicht verschwinden. Mittlerweile würde ich mir wünschen von den Codenamen wegzukommen. Es verwirrt mich einfach schon selbst bei der Fülle von Technologien die wir erstellen, den Codenamen jeweils der richtigen zuzuordnen. &lt;/p&gt;  &lt;p&gt;Velocity ist ein “Distributed Cache”. Oder auf Deutsch: Velocity ist ein “Verteilter Zwischenspeicher”. Ein Zwischenspeicher der logisch mehrere physikalische Maschinen zu einem einheitlichen Cache verschmelzen lässt. Die Velocity Infrastruktur sorgt hierbei das die Daten im Verbund für alle verfügbar sind und bei Bedarf auch noch repliziert werden.&lt;/p&gt;  &lt;p&gt;Wann setzt man Caching ein, wann macht es Sinn Daten nicht direkt aus der eigentlichen Datenquelle zu lesen und dementsprechend vorzuhalten?&lt;/p&gt;  &lt;p&gt;Wir benutzen in der Anwendung von Technologien öfters Cache-Systeme und Mechanismen als uns bewußt ist. Dies passiert meist implizit, ohne das wir davon viel mitbekommen. Ein Beispiel ist das Dateisystem. Das Dateisystem speichert die Zugriffe in einen Zwischenspeicher und ermöglicht so eine bessere Performance beim lesen und auch schreiben der Daten. Der Durchsatz wird erhöht und Fesplatten profitieren von dem Lese/Schreibcache.&lt;/p&gt;  &lt;p&gt;Wenn man Caching in seine eigene Anwendung einbauen möchte, so möchte man in der Regel die Performance steigern. Das ist oft dann notwendig wenn die Architektur der Anwendung Mehrschichtig ist und die Schichten auch physikalisch in unterschiedlichen Prozessen (oder auch Maschinen) liegen. Nur dann? Nein, das kann ebenfalls Sinn machen wenn es sich um eine Anwendung handelt die Intensive Operationen auf eine Datenquelle (nicht zwangsläufig eine Datenbank) durchführt und diese Operation jedesmal zusätzlich Zeit kostet. Hier bietet es sich auch an die Daten aus der Quelle im Speicher der Anwendung vorzuhalten.&lt;/p&gt;  &lt;p&gt;Vielleicht benutzt der ein oder andere für bestimmte Daten schon ein disconnected DataSet in welchem Lookup Daten im Prozess gehalten werden. Das ist im Prinzip auch ein Cache. Allerdings keiner der sich mit anderen Zwischenspeichern synchronisieren kann. Ich habe Lookup Daten erwähnt. Ein Cache ist also nicht für jede Art von Daten Sinnvoll. Welche machen denn Sinn?&lt;/p&gt;  &lt;h5&gt;Referenz Daten&lt;/h5&gt;  &lt;p&gt;Bleiben wir doch bei den Lookup Daten. Es sind sogenannte Referenz-Daten. Referenz-Daten sind z.B. Katalog-Daten, Daten von Mitarbeitern, Daten die sich nicht oft ändern, bzw. deren Änderung periodisch geschieht. Diese Daten sind eindeutig versioniert. Auf diese Daten wird auch in der Regel nur lesend zugegriffen und meist werden diese Referenzen nur an Aktivitäten in der Anwendung mitgegeben um sich darauf zu beziehen. &lt;/p&gt;  &lt;h5&gt;Aktivitäts Orientierte Daten&lt;/h5&gt;  &lt;p&gt;Es gibt aber auch Daten die während der Benutzung der Anwendung erzeugt werden. Zum Beispiel das Erstellen eines Warenkorbes. Diese Daten sind exklusiv für den jeweiligen Benutzer und werden auch schreibend verändert und sollten dementsprechend auch in einer Transaktion manipuliert werden können. &lt;/p&gt;  &lt;h5&gt;Resource Orientierte Daten&lt;/h5&gt;  &lt;p&gt;Bei bestimmten Anwendungen werden eine gewisse Anzahl von Resourcen im System vorhanden sein, die es dann abzuarbeiten gilt. Eine Resource könnte zum Beispiel bei einem Flugbuchungssystem der Sitzplatz in einer speziellen Maschine sein. Hier ist der Umgang meist lesend und wenn geschrieben wird, weil der Sitz gebucht wird, so passiert das im Wissen das konkurrierende Zugriffe erfolgen können. Eine Resource ist meist Bestandteil mehrerer Transaktionen. Hier gibt es zusätzlich die Problematik ob ich diese exklusiv beim Bearbeiten sperren möchte oder das System im Falle der Flugbuchung Überbuchungen zulässt, also mehr eine relaxte Art mit der Resource umzugehen.&lt;/p&gt;  &lt;p&gt;Diese drei Arten von Daten unterstützt Velocity. Was ist nun das besondere an einem verteilten Zwischenspeicher? Skalierbarkeit und Verfügbarkeit der Daten. Auf Server-Farmen ist der Einsatz von Caching nicht trivial. Was passiert bei Aktualisierungen von Referenzdaten, was passiert wenn ich auf Server A einen Warenkorb angelegt habe und ich auf Server C beim nächsten Request mir diesen anzeigen lassen möchte? Ein Roundtrip zur Datenbank nur um die Daten zwischen zu speichern? Genau in diesen Bereich kann Velocity helfen, um die Zugriffs-Last an den Daten-Backend zu verringern. &lt;/p&gt;  &lt;p&gt;Velocity vereint mehrere physikalische Maschinen zu einem logischen Cache den ich in diesem Verbund einheitlich ansprechen kann. Hier gibt es drei Begriffe die es zu verstehen gilt. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/dparys/WindowsLiveWriter/VelocityEineEinfhrung_5AB8/shot1_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" title="shot1" border="0" alt="shot1" src="http://blogs.msdn.com/blogfiles/dparys/WindowsLiveWriter/VelocityEineEinfhrung_5AB8/shot1_thumb.png" width="526" height="331" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h5&gt;Named Cache&lt;/h5&gt;  &lt;p&gt;Durch die Zuweisung einer logischen Einheit enthält man einen Named Cache der über die gewünschte Anzahl von Maschinen einheitlich ist und nur über den Namen (deshalb Named Cache) angesprochen wird. Lege ich ein Objekt in den Cache, so weiß ich nicht wo dieses Objekt physikalisch landet, sondern ich übergebe es einfach dem Cache und Velocity macht den Rest. Der Named Cache kann auch noch über die Konfiguration einer Policy im Verhalten angepasst werden.&lt;/p&gt;  &lt;h5&gt;Region&lt;/h5&gt;  &lt;p&gt;Eine Region ist physikalisch einer Maschine zugeordnet. Regionen werden implizit angelegt durch Velocity, ich kann diese auch explizit anlegen. Objekte können Regionen zugewiesen werden um so auch komplette Graphen in eine physikalische Region zu packen. Velocity kann auch Daten aus einer Region auf andere Maschinen duplizieren und in sogenannten “Secondary Regions” aufbewahren, für den Fall das eine Maschine wegbricht.&lt;/p&gt;  &lt;h5&gt;Cache Item&lt;/h5&gt;  &lt;p&gt;Zu guter letzt gibt es noch das Cache Item. Das Cache Item enthält den eigentlichen Inhalt den man Speichern möchte, zusätzlich attributiert mit einem eindeutigen Key, wenn man möchte auch noch Tags und Angaben wie lange zum Beispiel das Item im Cache leben darf. Dies kann im übrigen unabhängig von der Definition des Named Cache sein.&lt;/p&gt;  &lt;h5&gt;Arbeiten mit Velocity&lt;/h5&gt;  &lt;p&gt;Wie funktioniert nun der Zugriff auf die Cache Objekte? Es gibt hier zum einen ein Velocity Client der dafür sorgt das über die Routing Tabelle auf die richtigen Inhalte im verteilten Zwischenspeicher zugegriffen wird, zum anderen gibt es den Velocity Service der dafür verantwortlich ist mit den anderen Diensten innerhalb des Clusters zu kommunizieren. Eine grobe Übersicht der Architektur gibt das folgende Schaubild:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/dparys/WindowsLiveWriter/VelocityEineEinfhrung_5AB8/shot2_4.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" title="shot2" border="0" alt="shot2" src="http://blogs.msdn.com/blogfiles/dparys/WindowsLiveWriter/VelocityEineEinfhrung_5AB8/shot2_thumb_1.png" width="456" height="544" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Auf der Basta habe ich in meinem Velocity Vortrag eine Demo gezeigt, aber ich habe ganz vergessen zu zeigen wie der Quellcode aussieht um Objekte in den Cache zu legen. Vielleicht habe ich es unbewußt weggelassen weil die API wirklich sehr einfach gestrickt ist.&lt;/p&gt;  &lt;div&gt;   &lt;div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;     &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; text = &lt;span style="color: #006080"&gt;&amp;quot;Bitte zwischenspeichern!&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt; CacheFactory cacheFactory = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; CacheFactory();&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt; Cache cache = cacheFactory.GetCache();&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   5:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   6:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Objekt in Cache Speichern&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   7:&lt;/span&gt; CacheItemVersion item = cache.Add(&lt;span style="color: #006080"&gt;&amp;quot;EindeutigerKey&amp;quot;&lt;/span&gt;, text );&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   8:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   9:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Objekt wieder aus dem Cache lesen&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  10:&lt;/span&gt; item = ( &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; ) cache.Get( &lt;span style="color: #006080"&gt;&amp;quot;EindeutigerKey&amp;quot;&lt;/span&gt; );&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Die API verfügt zum arbeiten mit den Cache Objekten die Aufrufe, &lt;em&gt;Add&lt;/em&gt;, &lt;em&gt;Get&lt;/em&gt;, &lt;em&gt;Put &lt;/em&gt;und &lt;em&gt;Remove&lt;/em&gt;. Daneben hat man noch die Möglichkeit nach Tags zu suchen und komplette Regionen und Listen zu enumerieren. Das war es schon. &lt;/p&gt;

&lt;p&gt;Velocity ist momentan als CTP1 verfügbar. Im CTP1 sind noch nicht alle Features implementiert die im Release verfügbar sein sollen, unter anderem die Verfügbarkeits-Funktionalität. Diese werden erst mit dem CTP2 kommen. Microsoft würde sich über Feedback freuen.&lt;/p&gt;

&lt;p&gt;Links zum Thema&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/data/cc655792.aspx"&gt;Microsoft Project Code Named “Velocity”&lt;/a&gt;&lt;/li&gt;

  &lt;li&gt;&lt;a href="http://blogs.msdn.com/velocity/"&gt;Velocity Blog&lt;/a&gt;&lt;/li&gt;

  &lt;li&gt;&lt;a href="http://code.msdn.microsoft.com/velocity"&gt;Velocity Code Beispiele&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8966027" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dparys/archive/tags/Connected+Systems/default.aspx">Connected Systems</category><category domain="http://blogs.msdn.com/dparys/archive/tags/.NET+Framework/default.aspx">.NET Framework</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Data+Access/default.aspx">Data Access</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Services/default.aspx">Services</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Concurrency/default.aspx">Concurrency</category></item><item><title>Parallele Programmierung</title><link>http://blogs.msdn.com/dparys/archive/2008/08/04/parallele-programmierung.aspx</link><pubDate>Mon, 04 Aug 2008 09:38:57 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8828241</guid><dc:creator>dparys</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/dparys/comments/8828241.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dparys/commentrss.aspx?PostID=8828241</wfw:commentRss><wfw:comment>http://blogs.msdn.com/dparys/rsscomments.aspx?PostID=8828241</wfw:comment><description>&lt;p&gt;Heutzutage hat beinahe jeder neue Rechner mehr als einen Prozessorkern. In naher Zukunft d&amp;#252;rften sich Kerne in Prozessoren um ein vielfaches multiplizieren. Was liegt n&amp;#228;her als die gesamte Rechenleistung auch in eigenen Anwendungen zu nutzen? Multithreading Programmierung ist seit Jahren ein Thema mit dem sich viele Entwickler besch&amp;#228;ftigen. Es gibt je nach Betriebssystem unterschiedliche M&amp;#246;glichkeiten und auch diverse API's. Im Laufe der Zeit hat man aber erkannt das die Abstraktion auf Betriebssystem Ebene durch deren APIs nicht abstrakt genug ist. Es gibt heute schon verschiedene Ans&amp;#228;tze um parallelen Ausf&amp;#252;hrungscode zu schreiben, ich denke hierbei an OpenMP, MPI, Threading Building Blocks usw.&lt;/p&gt;  &lt;p&gt;Microsoft investiert sehr viel in diesem Bereich um parallele Programmierung und damit das Ausnutzen der lokalen Rechenleistung zu vereinfachen und zu steigern. Wir bieten nun mehrere Ans&amp;#228;tze um Code in Anwendungen zu parallelisieren. Neben PLINQ und der Task Parallel Library, welche beide f&amp;#252;r Managed Code sind, gibt es auch in naher Zukunft Neues f&amp;#252;r die nativen C++ Entwickler, was das genau ist kann man am besten untenstehenden Links entnehmen.&lt;/p&gt;  &lt;p&gt;Informationen rund um Parallele Verarbeitung findet man unter&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/concurrency"&gt;Parallel Computing Developer Center&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/pfxteam"&gt;Blog f&amp;#252;r Managed Code&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/nativeconcurrency"&gt;Blog f&amp;#252;r Native Code&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8828241" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dparys/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://blogs.msdn.com/dparys/archive/tags/C_2B002B002F00_CLI/default.aspx">C++/CLI</category><category domain="http://blogs.msdn.com/dparys/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.msdn.com/dparys/archive/tags/PLINQ/default.aspx">PLINQ</category><category domain="http://blogs.msdn.com/dparys/archive/tags/C_2B002B00_/default.aspx">C++</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Parallel+Computing/default.aspx">Parallel Computing</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Concurrency/default.aspx">Concurrency</category></item></channel></rss>