next up previous
Next: Versions of NetStream Up: NetStream: a Flexible and Previous: Basic Services in NetStream


Advanced Services

There are several advanced services available for any NetStream object. These services are specially important for solving synchronization tasks, namely establishing synchonization points (called barriers), broadcasting one message to the rest of processes, and checking whether there is a pending message in the regular" or \verb"packed stream. The corresponding methods in the NetStream class are (respectively) _barrier()", \verb"_broadcast(), and _probe(). As before, there exist methods with the same name and behavior that can be used as manipulators with the << and >> operators. See the following code to learn the syntax of the NetStream methods:

class NetStream
{
    public:
    ...                             // BASIC SERVICES already described
    NetStream& _pack_begin(void);   // Marks the beginning of a packed information
    NetStream& _pack_end(void);     // Marks the end of a packed and flush it to the net
    NetStream& _probe(const int stream_type, int& pending); // Check whether there are awaiting data
    NetStream& _broadcast(void);    // Broadcast a message to all the processes
    NetStream& _barrier(void);      // Sit and wait until all processes are in barrier
    ...
};

When programming for a LAN environment, passing basic C++ types such as int" or \verb"double is OK with modern technologies, since the latency is low. However, for a WAN environment sending many continuous messages with such basic types could provoke an unnecessary delay in communications. Network resources can be better exploited if the user define data packets.

Defining a data packet is very easy because only the manipulators

pack_begin
and
pack_end
must be used. All the output operations in between these two reserve words are put inside the same physical packet, with the ensuing savings in time. The contents of the packet are not forced to share the same base object class or type, thus improving the flexibility of this construction.

    if(mypid==0)    // The sending process
    {   ...
        strcpy(str,"this is sent inside a heterogeneous packet");
        netstream << pack_begin
                        << str << 9.9 << 'z'
                  << pack_end;
        ...
    }
    else            // The receiving process
    {
        ...
        netstream << wait(packed);  // Wait for a packed message
        netstream << pack_begin     // Reads the packed message
                        >> str >> d >> c
                  << pack_end;
        ...
    }


next up previous
Next: Versions of NetStream Up: NetStream: a Flexible and Previous: Basic Services in NetStream
Enrique Alba 2001-11-15