Webentwicklung - Objekte mit schwacher Identität

signet_gruen.gif

Webapplikationen sind Multi-Threaded Anwendung. So wird bei Internetanwendungen dann auch zwischen Prozessen und Threads unterschieden. Als Prozess wird
damit im Regelfall die gesamte Applikation bezeichnet, als Thread ein sich in dieser
Applikation befindlicher Ausführungsstrom.

Die elementarste Kernpunkt, die man bei der Entwicklung von webbasierten Softwaressystenen einhalten müss: Die Prozesse müssen theadsicher sein.

Threadsicherheit bedeutet, dass der Softwarecode gleichzeitig von verschiedenen Programmteilen mehrfach ausgeführt werden kann. Die Schwierigkeit dabei ist, dass die Applikationsdaten nur an einer Stelle und über das bekannte ACID-Prinzip dann natürlich nur exklusiv und durch genau einen thread geändert werden dürfen.

LOCKING von threadshared Objekten

Natürlich kann man die gesamte Threadverarbeitung mit der lock-Anweisung sperren. Diese ermittelt die Sperre für gegenseitigen Ausschluss eines bestimmten Objekts.

Allerdings darf man diese nicht mit schwachen Objekten sperren:

 
Imports System
Imports System.Web
Imports System.Web.Caching
Public Class Class1
Private Shared _reportRemovedFromCache As Boolean = False
Shared Sub New() End Sub Private Sub New() End Sub Public Shared Sub CacheReport() SyncLock (GetType(Class1))
HttpRuntime.Cache.Add("MyReport", CreateReport(), _
Nothing, Cache.NoAbsoluteExpiration, New TimeSpan(0, 1, 0), _ System.Web.Caching.CacheItemPriority.Default, _ New CacheItemRemovedCallback(AddressOf ReportRemovedCallback))
End SyncLock End Sub
Private Shared Function CreateReport() As String
Dim myReport As New System.Text.StringBuilder() myReport.Append("Sales Report") myReport.Append("2005 Q2 Figures") myReport.Append("Sales NE Region - $2 million") myReport.Append("Sales NW Region - $4.5 million") myReport.Append("Report Generated: " & DateTime.Now.ToString() & "") myReport.Append("Report Removed From Cache: " _ & _reportRemovedFromCache.ToString()) Return myReport.ToString() End Function
Public Shared Sub ReportRemovedCallback(ByVal key As String, _ ByVal value As Object, ByVal removedReason _ As CacheItemRemovedReason)
_reportRemovedFromCache = True
CacheReport()
End Sub
End Class

.z.B da Sie nie vorhersagen, welche Sperren aus einer anderen Anwendungsdomäne wie lange andauern.

Was sind schwache Objekte?

Ein Objekt hat eine schwache Identität, wenn ein Zugriff darauf über Grenzen von Anwendungsdomänen hinweg möglich ist. Ein Thread, der eine Sperre für ein Objekt zu erhalten versucht, das über eine schwache Identität verfügt, kann durch einen zweiten Thread in einer anderen Anwendungsdomäne blockiert werden, der eine Sperre für das gleiche Objekt besitzt. Die folgenden Typen haben eine schwache Identität und werden durch die Regel gekennzeichnet:

  • System.MarshalByRefObject
  • System.ExecutionEngineException
  • System.OutOfMemoryException
  • System.StackOverflowException
  • System.String
  • System.Reflection.MemberInfo
  • System.Reflection.ParameterInfo
  • System.Threading.Thread

 

 

© 2025 transresult, Alle Rechte vorbehalten. Impressum | Datenschutz Anmelden