<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Jacketing</id>
	<title>Jacketing - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Jacketing"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Jacketing&amp;action=history"/>
	<updated>2026-05-23T19:37:20Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Jacketing&amp;diff=672954&amp;oldid=prev</id>
		<title>imported&gt;Fan-vom-Wiki: {{Belege fehlen}}</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Jacketing&amp;diff=672954&amp;oldid=prev"/>
		<updated>2025-07-19T17:39:53Z</updated>

		<summary type="html">&lt;p&gt;{{Belege fehlen}}&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Belege fehlen}}&lt;br /&gt;
Unter &amp;#039;&amp;#039;&amp;#039;Jacketing&amp;#039;&amp;#039;&amp;#039; versteht man die Möglichkeit, einen blockierenden [[Systemaufruf]] zu umgehen.&lt;br /&gt;
&lt;br /&gt;
Ein Aufruf heißt &amp;#039;&amp;#039;blockierend&amp;#039;&amp;#039;, wenn er nicht nur rechnet, sondern stattdessen wartet, bis irgendein Ereignis eintritt, und erst dann weiterarbeitet. In einem System ohne [[Multitasking]] ist das fatal, der Computer ist bis zum Eintreten des Ereignisses nicht benutzbar. Aber auch wenn Multitasking unterstützt wird, kann ein blockierender Funktionsaufruf stören. Zum Beispiel sollte der [[Thread (Informatik)|Thread]], der die grafische Oberfläche aktuell hält, prompt auf Benutzereingaben reagieren.&lt;br /&gt;
&lt;br /&gt;
Viele Systemaufrufe, die auf externe Geräte zugreifen, sind blockierend.&lt;br /&gt;
&lt;br /&gt;
== Vorgehen bei Funktionen ohne Rückgabewert ==&lt;br /&gt;
Liefert der blockierende Systemaufruf keinen Rückgabewert, kann man den Aufruf in einen neuen Thread verschieben, den aufrufenden Thread aber gleichzeitig weiterlaufen lassen.&lt;br /&gt;
&lt;br /&gt;
=== Beispiel in Smalltalk ===&lt;br /&gt;
Als Klassenmethode von Object:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;br /&gt;
 unblock: selector&lt;br /&gt;
    &amp;quot;Macht den blockierenden Aufruf selector unblockierend.&amp;quot;&lt;br /&gt;
    |bs|&lt;br /&gt;
    bs := (#blocking , selector) asSymbol. &amp;quot;Der alte Aufruf wird umbenannt&amp;quot;&lt;br /&gt;
    self&lt;br /&gt;
        addSelector: bs&lt;br /&gt;
              withMethod: (self methodAt: selector) ; removeSelector: selector.&lt;br /&gt;
    self addSelector: selector&lt;br /&gt;
        withMethod: (self class compile:&lt;br /&gt;
            &amp;#039;[self &amp;#039;, (self standardMethodHeaderFor: bs), &amp;#039;] fork&amp;#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durch den Aufruf &amp;lt;code&amp;gt;Test unblock: #tuWas&amp;lt;/code&amp;gt; würde die Methode&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;br /&gt;
 tuWas&lt;br /&gt;
       Transcript show: &amp;#039;Yippie!&amp;#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
durch die zwei Methoden&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;br /&gt;
 blockingtuWas&lt;br /&gt;
       Transcript show: &amp;#039;Yippie!&amp;#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
und&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;br /&gt;
 tuWas&lt;br /&gt;
     [self blockingtuWas] fork&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ersetzt.&lt;br /&gt;
&lt;br /&gt;
Der Aufruf &amp;lt;code&amp;gt;tuWas&amp;lt;/code&amp;gt; würde nun in wenigen Millisekunden abschließen, allerdings käme die Ausgabe auf dem Transcript erst etwas später.&lt;br /&gt;
&lt;br /&gt;
== Vorgehen bei Funktionen mit Rückgabewert ==&lt;br /&gt;
Soll eine blockierende Routine aus einem Thread aufgerufen werden, in dem auch das Ergebnis benötigt wird, aber nicht notwendig sofort, verwendet man wieder obige Vorgehensweise, ändert aber die blockierende Routine, sodass sie Bescheid gibt, sobald sie abgearbeitet wurde. Die Kommunikation zwischen zwei Prozessen kann durch einen [[Semaphor (Informatik)|Semaphor]] geschehen. Der aufrufende Thread lauscht regelmäßig am Semaphor, ob eine Antwort vorliegt. Falls ja, lässt er sie sich geben und verwendet sie. Falls nein, rechnet er unbehelligt weiter.&lt;br /&gt;
&lt;br /&gt;
=== Beispiel ===&lt;br /&gt;
Sei &amp;lt;code&amp;gt;tuWas&amp;lt;/code&amp;gt; also ein blockierender Aufruf, der nach einer gewissen Zeit ein Ergebnis &amp;lt;code&amp;gt;e&amp;lt;/code&amp;gt; zurückliefert. Bis das zur Verfügung steht, soll regelmäßig &amp;lt;code&amp;gt;self tuWasAnderesInDerZwischenzeit&amp;lt;/code&amp;gt; ausgeführt werden&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;smalltalk&amp;quot;&amp;gt;&lt;br /&gt;
 |e s|&lt;br /&gt;
 s := Semaphore new.&lt;br /&gt;
 [e := self tuWas. s signal] fork.&lt;br /&gt;
 [self tuWasAnderesInDerZwischenzeit] doWhileFalse: [s isSignaled].&lt;br /&gt;
 &amp;quot;Hier steht e zur Verfügung&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Betriebssystemtheorie]]&lt;br /&gt;
[[Kategorie:Parallelverarbeitung]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Fan-vom-Wiki</name></author>
	</entry>
</feed>