Tupel utrymme

Ett tupelutrymme är en implementering av det associativa minnesparadigmet för parallell/distribuerad beräkning. Det tillhandahåller ett arkiv med tupler som kan nås samtidigt. Som ett illustrativt exempel, tänk på att det finns en grupp processorer som producerar bitar av data och en grupp processorer som använder datan. Producenterna lägger ut sin data som tuplar i utrymmet, och konsumenterna hämtar sedan data från utrymmet som matchar ett visst mönster. Detta är också känt som svarta tavlans metafor . Tupelutrymme kan ses som en form av distribuerat delat minne .

Tuple spaces var den teoretiska grunden för Linda -språket som utvecklades av David Gelernter och Nicholas Carriero vid Yale University 1986.

Implementeringar av tupelutrymmen har också utvecklats för Java ( JavaSpaces ), Lisp , Lua , Prolog , Python , Ruby , Smalltalk , Tcl och .NET Framework .

Objektutrymmen

Object Spaces är ett paradigm för utveckling av distribuerade datorapplikationer . Det kännetecknas av att det finns logiska enheter, kallade Object Spaces . Alla deltagare i den distribuerade applikationen delar ett objektutrymme . En leverantör av en tjänst kapslar in tjänsten som ett objekt och placerar den i objektutrymmet . Klienter till en tjänst kommer sedan åt objektutrymmet , tar reda på vilket objekt som tillhandahåller den nödvändiga tjänsten och får förfrågan betjänad av objektet.

Object Spaces , som ett datorparadigm, lades fram på 1980-talet av David Gelernter vid Yale University . Gelernter utvecklade ett språk som heter Linda för att stödja konceptet global objektkoordination.

Object Space kan ses som ett virtuellt arkiv, delat mellan leverantörer och accessorer av nätverkstjänster, som i sig abstraheras som objekt. Processer kommunicerar med varandra med hjälp av dessa delade objekt – genom att uppdatera objektens tillstånd när och när det behövs.

När ett objekt placeras i ett utrymme måste det registreras i en objektkatalog i objektutrymmet . Alla processer kan sedan identifiera objektet från objektkatalogen , med hjälp av egenskapssökning, där egenskapen som anger kriterierna för sökningen av objektet är dess namn eller någon annan egenskap som unikt identifierar det. En process kan välja att vänta på att ett objekt ska placeras i objektutrymmet , om det nödvändiga objektet inte redan finns.

Objekt, när de deponeras i ett objektutrymme, är passiva, dvs. deras metoder kan inte anropas medan objekten är i objektutrymmet . Istället måste åtkomstprocessen hämta den från objektutrymmet till dess lokala minne, använda tjänsten som tillhandahålls av objektet, uppdatera objektets tillstånd och placera tillbaka det i objektutrymmet .

Detta paradigm ger till sin natur ömsesidig uteslutning . För när ett objekt väl har nåtts måste det tas bort från objektutrymmet och placeras tillbaka först efter att det har släppts. Detta innebär att ingen annan process kan komma åt ett objekt medan det används av en process, vilket säkerställer ömsesidig uteslutning.

JavaSpaces

JavaSpaces är en tjänstespecifikation som tillhandahåller en distribuerad objektutbyte och koordineringsmekanism (som kan vara bestående eller inte) för Java -objekt. Den används för att lagra det distribuerade systemets tillstånd och implementera distribuerade algoritmer . I ett JavaSpace kommunicerar och koordinerar alla kommunikationspartners (kamrater) genom att dela tillstånd.

JavaSpaces kan användas för att uppnå skalbarhet genom parallell bearbetning, det kan också användas för att tillhandahålla tillförlitlig lagring av objekt genom distribuerad replikering, även om detta inte kommer att överleva ett totalt strömavbrott som en disk; den anses av många vara pålitlig så länge kraften är pålitlig. Distribution kan också ske till avlägsna platser; detta är dock sällsynt eftersom JavaSpaces vanligtvis används för låg latens , högpresterande applikationer snarare än tillförlitlig objektcache.

Det vanligaste mjukvarumönstret som används i JavaSpaces är Master-Worker-mönstret. Mästaren delar ut arbetsenheter till "utrymmet", och dessa läses, bearbetas och skrivs tillbaka till rummet av arbetarna. I en typisk miljö finns flera "utrymmen", flera mästare och många arbetare; arbetarna är vanligtvis utformade för att vara generiska, dvs de kan ta vilken enhet som helst från rummet och bearbeta uppgiften.

JavaSpaces är en del av Java Jini -tekniken, som i sig inte har varit någon kommersiell framgång. Tekniken har hittat och behållit nya användare genom åren och vissa leverantörer erbjuder JavaSpaces-baserade produkter. JavaSpaces förblir en nischteknik som mestadels används inom de finansiella tjänsterna och telekomindustrin där den fortsätter att behålla en trogen följare. Tillkännagivandet av Jini/JavaSpaces skapade en hel del hype även om Suns medgrundare och chef Jini-arkitekt Bill Joy uttryckte det rakt ut att denna dröm om distribuerade system kommer att ta " ett kvantsprång i tänkandet" .

Exempel användning

Följande exempel visar en applikation gjord med JavaSpaces. Först skapas ett objekt som ska delas i objektutrymmet . Ett sådant objekt kallas en Entry i JavaSpace-terminologi. Här används posten för att kapsla in en tjänst som returnerar en Hello World! sträng och håller reda på hur många gånger den användes. Servern som tillhandahåller denna tjänst kommer att skapa ett objektutrymme eller JavaSpace . Posten skrivs sedan in i JavaSpace . Klienten läser posten från JavaSpace och anropar sin metod för att komma åt tjänsten, och uppdaterar dess användningsantal genom att göra det. Den uppdaterade posten skrivs tillbaka till JavaSpace .


     
          
         0
 
        
         
          
     
 
        
            
     
 // En Entry class  public  class  SpaceEntry  implementerar  Entry  {  public  final  String  message  =  "Hello World!"  ;  offentligt  heltalsantal  =  ;  _  public  String  service  ()  {  ++  count  ;  returnera  meddelande  ;  }  public  String  toString  ()  {  return  "Count: "  +  count  ;  }  } 

   
            
                         
                       
         
                   
         
           
              
         
     
 // Hej världen! server   public  class  Server  {  public  static  void  main  (  String  []  args  )  kastar  Exception  {  SpaceEntry  entry  =  new  SpaceEntry  ();  // Skapa Entry-objektet  JavaSpace  space  =  (  JavaSpace  )  space  ();  // Skapa ett objektutrymme  // Registrera och skriv inträdet i  utrymmet  .  skriv  (  entry  ,  null  ,  Lease  .  FOREVER  );  // Pausa i 10 sekunder och hämta sedan posten och kontrollera dess tillstånd.  Tråd  .  sömn  (  10  *  1000  );  SpaceEntry  e  =  blanksteg  .  read  (  entry  ,  null  ,  Long  .  MAX_VALUE  );  System  .  ut  .  println  (  e  );  }  } 

   
            
             
               
         
           
     
 // Client  public  class  Client  {  public  static  void  main  (  String  []  args  )  throws  Exception  {  JavaSpace  space  =  (  JavaSpace  )  space  ();  SpaceEntry  e  =  blanksteg  .  take  (  ny  SpaceEntry  (),  null  ,  Long  .  MAX_VALUE  );  System  .  ut  .  println  (  e  .  service  ());  utrymme  .  skriv  (  e  ,  null  ,  Lease  .  FÖR EVIGT  );  }  } 

Böcker

  •   Eric Freeman , Susanne Hupfer, Ken Arnold : JavaSpaces principer, mönster och praxis. Addison-Wesley Professional, 1 juni 1999, ISBN 0-201-30955-6
  •   Phil Bishop, Nigel Warren: JavaSpaces in Practice. Addison Wesley, 2002, ISBN 0-321-11231-8
  •   Max K. Goff: Network Distributed Computing: Fitscapes and Fallacies , 2004, Prentice Hall, ISBN 0-13-100152-3
  •   Sing Li, et al.: Professional Java Server Programming , 1999, Wrox Press, ISBN 1-86100-277-7
  •   Steven Halter: JavaSpaces Exempel genom Exempel , 2002, Prentice Hall PTR, ISBN 0-13-061916-7

Intervjuer

Artiklar

Se även

Källor

externa länkar