Re: Shared Memory Stuff ?

From: Date: Sun, 15 Oct 2000 08:59:01 +0000
Subject: Re: Shared Memory Stuff ?
Groups: php.general 
Request: Send a blank email to php-general+get-20227@lists.php.net to get a copy of this message
Ahh... wow... this is cool stuff.... Ok... so I can actually get stuff from other programs... and include it into my programs.... oh... so am i right by saying that a c program can perform let's say powerful calculations... and store it in a shared memory block... and then i can use shmop in php to access that block.. ? and ur also saying that it would be faster than actually storing and then reading it.. ? if that's it.. then is pretty cool.... --- Jeff Davis <jdavis@wasabimg.com> wrote: > I asked the same question not long ago, so I will > give you my interpretation > of shared memory and then the responses I received > on this list. > > Think of shared memory as a file in RAM, and > semaphores as flock()-type > functions. You choose a key (like a filename, except > has to be a number), > permissions, and the size of the memory block (ok, > so this is unlike a file > system, but you have to pick a value at the > creation). Then you reaad and > write with various processes. This is fast IPC > (interprocess communication), > designed to move small amounts of data between > programs (that run otherwise > independently of eachother). Semaphores control the > writing so that you > don't write while another process reads or writes, > kind of like flock() > > I don't think the shared memory is cleaned up > automatically, so watch for > memory leaks when using this feature. You also may > have some difficuly if > you have never programmed in C before. Finally, > don't even try this in > windows, it is not supported by the OS itself > (windows has no shared memory > at all, from what I understand). > > The replies I got are listed below. > > I hope this helps you out, I know it enlightened me. > > Regards, > Jeff Davis > > REPLIES: > When you create a shared memory segment the system > needs a way to identify > your shared memory segment from all other shared > memory segments out there. > This is accomplished by assigning each shared memory > segment an identifier > of sorts. The system then uses that identifier as a > pointer to your shared > memory segment. The key should be a unique number so > that the system doesn't > > confuse your shared memory segment with someone > else's memory segment. > The access modes for shared memory are the same as > for files, ex 644 would > mean that the shared memory segment is world > readable but only the owner > (person who created the memory segment) can write to > it. > Shared memory is the fastest IPC (Inter Process > Communication) method which > means its generally used to quickly transfer data > between separate process', > > ex. I use shared memory to transfer date between a C > daemon running on a > system and a php client. > > > Ilia Alshanetsky > iliaa@home.com > > PHP has several problems related to shared memory. > > 1) PHP sticks a php-signature on a shared memory > block, last time I checked > you could not just 'dump' data in a block. > So, in order to communicate with a C program you'd > need to use the 'php > method' of reading and writing shared memory. (Which > can be quite a PITA, > since you'd have to dig into the php sourcecode to > figure out the block > layout and encoding.) > > 2) Synchronisation. Usually, when dealing with a > shared piece of memory > there is some kind of synchronisation, and very > often that is done using > semaphores. Now, when you enter a WAIT state the > process is suspended, and > if the process waiting is never signalled the > process *stays* suspended. PHP > > execution timers do *not* terminate processes that > are in suspended state. > This is a very nasty effect that makes semaphores a > very dangerous tool in > php. Deadlocks are not a good thing. > > So, if you're absolutely sure what you're doing, > shared memory may be a very > > fast way of transferring data. But I would advise > using alternative methods > of communication if you want to communicate with > other php scripts or other > processes. (For example, pipes or unix > domainsockets) > > -Sander > > The p > > > ----- Original Message ----- > From: "Sander Pilon" <sander@3dnews.net> > To: "Ilia Alshanestky" <iliaa@home.com>; "Jeff > Davis" <jdavis@wasabimg.com>; > > <php-general@lists.php.net> > Sent: Saturday, October 14, 2000 5:18 PM > Subject: RE: [PHP] Shared Memory > > > > PHP has several problems related to shared memory. > > > > 1) PHP sticks a php-signature on a shared memory > block, last time I > checked > > you could not just 'dump' data in a block. > > So, in order to communicate with a C program you'd > need to use the 'php > > method' of reading and writing shared memory. > (Which can be quite a PITA, > > since you'd have to dig into the php sourcecode to > figure out the block > > layout and encoding.) > > > > This is no longer an issue if you use the new > shmop() of shared memory > functions that have been added in php 4.0.3. > Shmop doesn't add any extra headers to the shared > memory segment, which > means you don't have the headache of creating > headers etc... > > > 2) Synchronisation. Usually, when dealing with a > shared piece of memory > > there is some kind of synchronisation, and very > often that is done using > > semaphores. Now, when you enter a WAIT state the > process is suspended, and > > > if the process waiting is never signalled the > process *stays* suspended. > PHP > > execution timers do *not* terminate processes that > are in suspended state. > > > This is a very nasty effect that makes semaphores > a very dangerous tool in > > > php. Deadlocks are not a good thing. > > > > So, if you're absolutely sure what you're doing, > shared memory may be a > very > > fast way of transferring data. But I would advise > using alternative > methods > > of communication if you want to communicate with > other php scripts or > other > > processes. (For example, pipes or unix > domainsockets) > > > > -Sander > > > > > > > > When you create a shared memory segment the > system needs a way to > identify > > > your shared memory segment from all other shared > memory segments > > > out there. > > > This is accomplished by assigning each shared > memory segment an > identifier > > > of sorts. The system then uses that identifier > as a pointer to your > shared > > > memory segment. The key should be a unique > number so that the > > > system doesn't > > > confuse your shared memory segment with someone > else's memory segment. > > > The access modes for shared memory are the same > as for files, ex 644 > would > > > mean that the shared memory segment is world > readable but only the owner > > > > (person who created the memory segment) can > write to it. > > > Shared memory is the fastest IPC (Inter Process > Communication) > > > method which > > > means its generally used to quickly transfer > data between > > > separate process', > > > ex. I use shared memory to transfer date between > a C daemon running on a > > > > system and a php client. > > > > > > > > > Ilia Alshanetsky > > > iliaa@home.com > > > > > > > > > > > > ----- Original Message ----- > > > From: "Jeff Davis" <jdavis@wasabimg.com> > > > To: <php-general@lists.php.net> > > > Sent: Saturday, October 14, 2000 4:05 PM > > > Subject: [PHP] Shared Memory > > > > > > > > > > I read the following at the php.net manual: > > > > > > > > shm_open() takes 4 parameters: key, which is > the system's id for the > > > > shared memory block, this parameter can be > passed as a decimal or hex. > > > > > > > > > I am interested in using shared memory, but I > don't know what to > supply > > > > for the key. I also don't know how the access > mode (ie 0644) works > with > > > > memory. What kinds of situations might shared > memory be used for? Is > it > > > > to hold data from one script to the next, or > should it not be sued for > > > > > that? > > > > > > > > Thanks, > > > > Jeff Davis > > > > > > > Mukul Sabharwal wrote: > > > Hi, > > > > I wanted to know more about shared memory and what > it > > could be used for ? And how is it different from > what > > we use normally in programming ? > > > > thanks. > > > > ===== > > To Find Out More About Me : http://mukul.tsx.org/ > > > > __________________________________________________ > > Do You Yahoo!? > > Yahoo! Messenger - Talk while you surf! It's > FREE. > > http://im.yahoo.com/ > > > > -- > > PHP General Mailing List (http://www.php.net/) > > To unsubscribe, e-mail: > php-general-unsubscribe@lists.php.net > > For additional commands, e-mail: > php-general-help@lists.php.net > > To contact the list administrators, e-mail: > php-list-admin@lists.php.net > > > -- > PHP General Mailing List (http://www.php.net/) > To unsubscribe, e-mail: > php-general-unsubscribe@lists.php.net > For additional commands, e-mail: > php-general-help@lists.php.net > To contact the list administrators, e-mail: > php-list-admin@lists.php.net > ===== To Find Out More About Me : http://mukul.tsx.org/ __________________________________________________ Do You Yahoo!? Yahoo! Messenger - Talk while you surf! It's FREE. http://im.yahoo.com/

« previous php.general (#20227) next »