[an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive]
 
[an error occurred while processing this directive] [an error occurred while processing this directive]
Skåne Sjælland Linux User Group - http://www.sslug.dk Home   Subscribe   Mail Archive   Forum   Calendar   Search
MhonArc Date: [Date Prev] [Date Index] [Date Next]   Thread: [Date Prev] [Thread Index] [Date Next]   MhonArc
 

Re: [PROGRAMMERING] Hvordan ? Et program skal sende beskeder til N andre.



Hans-Christian Stadler wrote:

> Hvis du skal have en high performance løsning, så er det jo nok
> shared memory der er hurtigst. Jeg har lavet et lille eksempel
> nedenfor, hvor en process distribuerer noget data til 4 child
> processer via shared memory.
> Jeg antager dog, at du vil have forskellige processer, fordi de
> så ikke kan overskrive hinandens memory og den slags. Så skal
> man i hvert fald sætte andre rettigheder på den sharede memory
> end jeg har gjort (write for parent, read for børn) og køre
> signaleringen via en anden methode, f.eks. normale UNIX signaler
> til process grupper. Signaleringen i eksemplet kan måske være
> uhensigtsmæssig, fordi man bruger usleep og polling.
> Man kan skrive en generisk proxy, der tager inputtet fra parent
> processen og forwarder disse data til en anden maskine, hvis man
> har brug for det.
> 
> Men løsningen er måske for high tech til dit problem?
> 

Systemet jag jobbar med bygger på en kombination av shared memory och
semaphores. Shared memory arean är strukturerad för varje process som skall
kunna skicka/ta emot meddelanden. INGEN får dock tillgång till arean om inte
man först har fått en gemensam semaphor. Visst, andra processer kan skriva
sönder arean, men vi är 'ensamma' om systemet, dvs inga andra system jobbar 
mot vårt system. Men man kan ersätta shared memory/semaphores med
message-queues. Jacob pratade om gnat, vilket får mig att tro att det skall
göras i Ada? Då finns en binding till message queues på 

http://lundin.homelinux.net/sv_m.html

Här är det abstraherat lite grand, så programmeraren skickar bara en egen
record till mottagaren, som sedan packar upp, och läser innehållet.
Mellan varven ligger mottagarprocesserna is sleep, via msgget

(om det verkligen skall göras i Ada och ovanstående används
kan jag nog hålla lite support via mail om det behövs)

Kan dock bara köras lokalt, och förutsätter att records som skickas är 
deklarerade in en spec som både mottager och sändare har tillgång till.

Förfarandet som beskrivs påminner om 'publish and subscribe' modellen
Låt servern starta först, och klienterna skicka ett subscribe meddelande
till servern vid uppstart. När ett givet event inträffar, skickar server 
eventet till de klienter som har gjort subscribe

Även om det skall göras i c/c++ är det ett enkelt, säkert,och snabbt
förfarande

/Björn



 
Home   Subscribe   Mail Archive   Index   Calendar   Search

 
 
Questions about the web-pages to <www_admin>. Last modified 2005-08-10, 22:44 CEST [an error occurred while processing this directive]
This page is maintained by [an error occurred while processing this directive]MHonArc [an error occurred while processing this directive] # [an error occurred while processing this directive] *