<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Schauderhaft &#187; Concurrency</title>
	<atom:link href="http://blog.schauderhaft.de/tag/concurrency/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.schauderhaft.de</link>
	<description>Softwaredevelopment, Projectmanagement, Qualitymanagement and all things &#34;schauderhaft&#34;</description>
	<lastBuildDate>Sun, 05 Feb 2012 20:46:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Welche Bedeutung bekommt Concurrency für Enterprise Applications</title>
		<link>http://blog.schauderhaft.de/2008/06/12/welche-bedeutung-bekommt-concurrency-fur-enterprise-applications/</link>
		<comments>http://blog.schauderhaft.de/2008/06/12/welche-bedeutung-bekommt-concurrency-fur-enterprise-applications/#comments</comments>
		<pubDate>Thu, 12 Jun 2008 16:18:07 +0000</pubDate>
		<dc:creator>Jens Schauder</dc:creator>
				<category><![CDATA[Softwaredevelopment]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[Concurrency]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[vision]]></category>

		<guid isPermaLink="false">http://blog.schauderhaft.de/2008/06/12/welche-bedeutung-bekommt-concurrency-fur-enterprise-applications/</guid>
		<description><![CDATA[Wenn man sich auf IT-Blogs und Konferenzen tummelt ist immer wieder die Rede von Concurrency, und wie wichtig das in Zukunft wird. Fakt ist sicherlich das Moorsche Gesetz in seiner alten Form ist am Ende. Wir werden uns mit immer mehr Kernen in unseren CPUs herumschlagen müssen. Fakt ist aber auch: Datenbanken und Webserver mit [...]]]></description>
			<content:encoded><![CDATA[<p>Wenn man sich auf <a href="/2008/05/19/jax-08-sprachen-concurrency-security-architektur/">IT-Blogs</a> und <a href="http://jax2007blog.it-agile.de/2007/04/concurrency-past-and-present.html">Konferenzen </a>tummelt ist immer wieder die Rede von Concurrency, und wie wichtig das in Zukunft wird. Fakt ist sicherlich das Moorsche Gesetz in seiner alten Form ist am Ende. Wir werden uns mit immer mehr Kernen in unseren CPUs herumschlagen müssen. Fakt ist aber auch: Datenbanken und Webserver mit vielen Usern sind schon super parallelisiert. Bleiben die Clientrechner, und Webanwendungen bzw. Datenbanken mit nur wenigen Benutzern.</p>
<p>Ich denke im ersten Schritt wird das, was schon seit jeher zu den Best Practices gehört wichtiger: Lang laufende Aktionen werden in ihren eigenen Thread ausgelagert, damit der Benutzer nicht auf die Abarbeitung warten muss. Aber dies lastet die Prozessoren noch nicht besser aus, denn die lang laufenden Aktionen laufen lange, weil auf Ressourcen gewartet wird: Die Antwort vom Web Service, von der Datenbank oder vom Filesystem. Das ganze wird nur fixer, weil man auf drei Dinge gleichzeitig warten kann. Aber warten kann schon eine CPU mit einem Kern ziemlich gut auf ziemlich viele Dinge.Die eigentliche Frage: Was tun mit den andere Prozessoren / Kernen bleibt also. Ich sehe zur Zeit zwei Alternativen:</p>
<ul>
<li> Wir finden keine gute Antwort auf die Frage. Dies wäre in der Tat fatal, denn das Moorsche Gesetz treibt die gesamte IT Industrie! Warum soll ich mir einen neuen Rechner kaufen, wenn die Software so schnell läuft wie auf dem alten? Warum soll ich mir neue Software kaufen, wenn die auch nicht mehr kann als die alte, da sie die gleichen Ressourcen zur Verfügung hat wie die alte? Ich halte diese Bedrohung für durchaus ernst und wundere mich, dass ich diesen Gedanken noch nirgends so gelesen habe.</li>
<li>Wir tun komplexere Dinge. Der größte Teil der der Anwendungen, die wir schreiben ist doch erschreckend banal: Benutzer gibt Daten ein, wir schubsen die Daten von hier nach da, drehen sie auf links und schreiben sie schließlich in eine Datenbank. Wirklich komplexe Aufgaben wie Optimierungsprobleme oder Simulationen, anspruchsvolle 3D-Visualisierungen von Daten, stehen bei den meisten Entwicklern nur sehr selten im Pflichtenheft. Das hat zweierlei Gründe. Einerseits sind nur wenige Entwickler von &#8216;Enterprise Applications&#8217; in der Lage solche Probleme zu lösen, andererseits ist die Hardware schon mit den einfachen Dingen komplett ausgelastet. Aber letzteres wird sich ändern. Auf einem normalen PC werden wir schon bald ein Dutzend Prozessorkerne haben, die nicht richtig ausgelastet sind. Wenn wir dem Kunden neue Versionen unserer Software verkaufen wollen, müssen wir ihm zeigen, dass wir mit dieser Rechenleistung etwas anfangen können. Berechnungen und Optimierungen, die wir bisher als nicht handhabbar abgetan haben, und dem Benutzer überlassen haben, müssen wir uns krallen, in parallel verarbeitbare Algorithmen gießen, nett visualisieren und in die Anwendung integrieren.</li>
</ul>
<p>Daher meine apokalyptische Prophezeiung: Wer als Software Entwickler in 10 Jahren noch einen Job haben will, sollte hoffen dass Java sich zum nächsten Cobol entwickelt, und für Leute mit veraltetem Wissen viel Geld bezahlt wird, oder sie sollte sich schon mal an <a href="http://20bits.com/2007/05/08/introduction-to-dynamic-programming/">nicht triviale Algorithmen</a> herantasten.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.schauderhaft.de/2008/06/12/welche-bedeutung-bekommt-concurrency-fur-enterprise-applications/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JAX 08: Sprachen,  Concurrency, Security, Architektur</title>
		<link>http://blog.schauderhaft.de/2008/05/19/jax-08-sprachen-concurrency-security-architektur/</link>
		<comments>http://blog.schauderhaft.de/2008/05/19/jax-08-sprachen-concurrency-security-architektur/#comments</comments>
		<pubDate>Mon, 19 May 2008 18:40:08 +0000</pubDate>
		<dc:creator>Jens Schauder</dc:creator>
				<category><![CDATA[Softwaredevelopment]]></category>
		<category><![CDATA[aop]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[Concurrency]]></category>
		<category><![CDATA[dsl]]></category>
		<category><![CDATA[jax08]]></category>
		<category><![CDATA[quality]]></category>
		<category><![CDATA[reading]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://blog.schauderhaft.de/2008/05/19/jax-08-sprachen-concurrency-security-architektur/</guid>
		<description><![CDATA[Wie schon erwähnt war ich vor ein paar Wochen auf der JAX 08, und ich bin immer noch mit den Nachwirkungen beschäftigt. Hier meine persönliche Zusammenfassung der wesentlichen Erkenntnisse. Sprachen Das aktuelle Thema überhaupt ist sicherlich Sprachen. Durch die Allgegenwart von zwei wesentlichen Laufzeitumgebungen (JVM von Java/Sun und der CLR von .NET/Microsoft) ist es extrem [...]]]></description>
			<content:encoded><![CDATA[<p>Wie schon <a href="/2008/04/24/komplexitat-und-die-neuen-sprachen/">erwähnt</a> war ich vor ein paar Wochen auf der <a href="http://it-republik.de/jaxenter/blog/2008/02/12/dynamische-sprachen-ruby-jruby-groovy-co/">JAX 08</a>, und ich bin immer noch mit den Nachwirkungen beschäftigt. Hier meine persönliche Zusammenfassung der wesentlichen Erkenntnisse.</p>
<p><strong>Sprachen</strong></p>
<p>Das aktuelle Thema überhaupt ist sicherlich Sprachen. Durch die Allgegenwart von zwei wesentlichen Laufzeitumgebungen (JVM von Java/Sun und der CLR von .NET/Microsoft) ist es extrem einfach neue Sprachen mal auszuprobieren. Zu dem Thema empfehle ich den <a href="http://www.voelter.de/data/articles/trends2007.pdf">Artikel von Markus Völter</a>.</p>
<p>Meine persönlichen Erkenntnisse dazu:</p>
<ul>
<li>Fast(?) nichts von den Konzepten ist neu. Die Basis für funktionale Sprache z.B. ist das Lambda Kalkül von 1930. Insbesondere das Polyglotte Programmieren ist doch längst Standard. Ich z.B. zähle in den meisten Projekten mindestens Java, SQL, PL/SQL, HTML und CSS zu meinem Handwerkszeug. Was sich ändern könnte, ist warum wir zwei oder mehr Sprachen einsetzen: Weil bestimmte Aspekte in der einen, andere in der zweiten Sprache besser darstellbar sind. Während bisher der Grund der Mangel an Alternativen ist. (Ja ich weiß, man kann auch in Oracle mit Java arbeiten. Aber wer das einwirft hat es noch nicht ernsthaft ausprobiert).</li>
<li>Wir werden uns damit beschäftigen müssen. Heiße Kandidaten für die praktische Anwendung sind für mich: Groovy und Scala.<br />
Auch spannend finde ich Haskell. Ich habe vor vielen Jahren an der Uni <a href="http://de.wikipedia.org/wiki/Miranda_%28Programmiersprache%29">Miranda </a>gelernt und hätte nie gedacht, dass dies mal im Berufsleben relevant werden könnte.<br />
Als Physiker, der einmal intensiv mit Fortran gearbeitet hat finde ich auch <a href="http://en.wikipedia.org/wiki/Fortress_%28programming_language%29">Fortress </a>sehr beeindruckend. Dies Sprache kann zumindest für Mathematiker und ähnliche <a href="http://research.sun.com/projects/plrg/faq/NAS-CG.pdf">sehr leserlich gerendert</a> werden und ist speziell auf (massiv)parallele Ausführung ausgerichtet.</li>
</ul>
<p>Womit wir bei einem weiteren Thema sind:</p>
<p><strong>Concurrency</strong></p>
<p>Das Moore&#8217;sche Gesetz als Basis des Quaketunings (18 Monate Quake spielen, schon ist die Anwendung doppelt so schnell) ist am Ende. Als &#8216;horizontale Ausweichbewegung&#8217; werden uns von AMD und Intel Mehrkern CPUs auf den Schreibtisch gestellt. Dadurch geraten überall Leute in Panik, existierende Anwendungen würden nun wie die Fliegen von den Wänden fallen, da Threadingprobleme sich nun manifestieren.</p>
<p>Nun ja, ich weiß nicht was für Anwendungen ihr schreibt, aber ich schreibe beruflich entweder Swing oder Webanwendungen, die auf Datenbanken gehen. Nur ein sehr kleiner Teil der Arbeit steckt in komplexen Algorithmen, und ich habe noch nie etwas davon parallelisiert. Datenbanken und Webserver laufen &#8216;schon immer&#8217; auf Mehrprozessormaschinen. Es sind heute halt 512 statt 16. Die Art und Weise wie dort Parallelverarbeitung eingesetzt wird, ist extrem einfach und daher handhabbar: Jede Anfrage bekommt einen Thread, und darf ihn für sich alleine verwenden, bis die Anfrage abgearbeitet ist. Zumindest sieht es aus der Sicht des Entwicklers so aus.</p>
<p>Nur in Swing muss man typischer Weise mit mehreren Threads arbeiten, da lang laufende Aktionen sonst die Darstellung der Anwendung blockieren. Dies wird man aber wenn irgend möglich minimieren,  da jeder der <a href="http://www.amazon.de/gp/redirect.html?ie=UTF8&amp;location=http%3A%2F%2Fwww.amazon.de%2FConcurrent-Programming-Java-Principles-Addison-Wesley%2Fdp%2F0321256174%3Fie%3DUTF8%26s%3Dbooks-intl-de%26qid%3D1211220705%26sr%3D1-5&amp;site-redirect=de&amp;tag=schauderhafte-21&amp;linkCode=ur2&amp;camp=1638&amp;creative=6742">Doug Leas Buch</a><img src="http://www.assoc-amazon.de/e/ir?t=schauderhafte-21&amp;l=ur2&amp;o=3" style="border: medium none  ! important; margin: 0px ! important" border="0" height="1" width="1" /> gelesen hat, weiß wie schwierig Concurrency ist.</p>
<p>Viele der neuen Sprachen haben aber Konstrukte, die die Verteilte Ausführung unterstützen und es ist ja nicht so, dass wir die nicht zu nutzen wüssten. Unabhängig von der Anzahl der Prozessoren gibt es nämlich einen Bereich, in dem Concurrency eine Rolle spielen sollte: bei dem Zugriff auf verteilte Ressourcen. Egal ob es die Datenbank oder der entfernte Web Service ist, wenn wir eine Anfrage abschicken und warten, bis die Antwort kommt, bevor wir die nächste Anfrage lostreten verschwenden wir mindestens Zeit, und meist auch wertvolle Ressourcen (mindestens den wartenden Thread). Je nachdem wie knapp die Ressourcen sind, wird man früher oder später genötigt sein, die Anfragen parallel anzustoßen und anschließend die Ergebnisse zusammenzuführen. Schön wenn die Sprache mit der man dies tut, ein solches Vorgehen angemessen unterstützt.</p>
<p><strong>Security</strong></p>
<p>Es gibt immer wieder Stimmen, die meinen, Security würde jetzt DAS große Thema. Vertraut mir, wird es nicht. Genauso wenig wie Gasmasken oder Panzertüren DAS große Thema werden. Aber Security ist ein Dauerbrenner, den niemand ignorieren sollte. Oder schließt ihr euer Auto und eure Wohnung nicht ab?  Daher gab es auch auf der JAX Vorträge zu diesem Thema.</p>
<p>Für mich die wichtigsten Punkt waren dabei:</p>
<ul>
<li> * Der <a href="http://de.wikipedia.org/wiki/Demingkreis">Deming Zyklus</a> gilt auch hier. D.h.
<ul>
<li> Plant was eure Sicherheitsziele sind und was ihr dafür tun müsst. Wollt ihr euch gegen Skriptkiddies schützen? Oder haltet ihr die NSA für euren Feind? In letzterem Fall könnte aber auch ein Psychater helfen <img src='http://blog.schauderhaft.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </li>
<li> Führt die Maßnahmen durch.</li>
<li> Prüft, ob die Maßnahmen wirksam sind.</li>
<li> Wenn die Prüfung negativ ausfällt, reagiert darauf.</li>
</ul>
</li>
<li> Schwierig an dem Security Thema ist, dass selbst gigantische Sicherheitsprobleme nicht von allen erkannt werden. Wenn ich in mein Haus eine Tür aus Pappe einbaue, brauche ich keinen Experten um zu erkennen, dass das eine schlechte Idee ist. Bei Software ist das ganze deutlich weniger offensichtlich. Ich habe die privaten Schlüssel für Zertifikate schon gemailt bekommen. Daher gibt es eine ganz wichtige Aufgabe, wenn eine Anwendung &#8216;sicher&#8217; werden muss: Awareness schaffen. Alle Beteiligten (Entwickler, Designer, Tester, Administratoren, Anwender, &#8230;) müssen in Sachen Security geschult werden. Denn was nützt die schöne Sicherheitsarchitektur, wenn der Benutzer seines Sohnes Namen als Passwort verwendet und das auch noch per E-Mail verschickt und auf den Monitorrahmen schreibt?</li>
<li> Security heißt nicht einfach Benutzer Authentifizierung und Authorisierung sondern durchdringt den gesamten Entwicklungsprozess.
<ul>
<li> Bei der Analyse müssen die Anforderungen aufgenommen werden.</li>
<li> Diese müssen bei der Architektur und dem Design berücksichtigt werden.</li>
<li> Es muss natürlich implementiert werden,</li>
<li> aber auch getestet,</li>
<li> deployed</li>
<li> und genutzt</li>
</ul>
<p>Und wie ich oben skizziert habe, gibt es auch in den Bereichen Herausforderungen, wo man sie normalerweise vielleicht nicht erwartet.</li>
</ul>
<p><strong>Architektur</strong></p>
<p>Ist ein weiterer Dauerbrenner, und ähnlich wie bei Security lautet hier mein Hinweis <a href="http://de.wikipedia.org/wiki/Demingkreis">Deming Circle</a>! Eine Architektur hat eine Aufgabe zu erfüllen. Die Aufgabe sollte vorher klar sein und nachher muss geprüft werden, dass die Aufgabe gelöst wurde. Ansonsten ist Architektur ein Unfall oder Selbstbefriedigung des Architekten.</p>
<p>Durch das Thema Nr.1 &#8216;Sprachen&#8217; gewinnen wir gerade im Bereich Architektur gerade gewaltig an Möglichkeiten:</p>
<ul>
<li>Unterschiedliche Sprachen für unterschiedliche Bereiche.</li>
<li>DSLs für Spezialfälle</li>
<li>AOP oder spezielle Sprachstrukturen für die Umsetzung von Architekturentscheidungen</li>
</ul>
<p><strong>SOA und BPM</strong></p>
<p><a href="/2008/04/23/konferenzen-und-big-player-sessions/">Viel Hype und (fast) nichts dahinter</a>.</p>
<p><strong>Das 5. Element (Quintessenz)</strong></p>
<p>Die Probleme bleiben die alten. Die Lösungen sind auch nicht neu. Die Zeiten bleiben interessant.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.schauderhaft.de/2008/05/19/jax-08-sprachen-concurrency-security-architektur/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

