Interprocess Communication with Pipes and Sockets

Interprocess Communication with Pipes and Sockets

1 ECE 3574: InterProcess Communication with Pipes and Sockets Changwoo Min 2 InterProcess Communication with Pipes and Sockets • Today we are going to look at concurrent programming using multiple OS processes. • communicating processes • Unix and Windows pipes • Unix fork + pipes • Cross-platform IPC using QProcess and QLocalSocket 3 A reoccuring theme in concurrent programming is the idea of communication over a channel • Depending on how these are implemented they go by many names: • Pipes, Sockets, Message Queues, Channels, Signals • The idea is simple. +------------------+ process 1 writes ->| |-> process 2 reads +------------------+ 4 Communication may be half-duplex or full- duplex • Half-Duplex +------------------+ process 1 writes ->| |-> process 2 reads +------------------+ • Full-Duplex +------------------+ writes ->| |-> reads +------------------+ process 1 process2 +------------------+ reads <-| |<- writes +------------------+ 5 The message sent over the channel can take various forms • the message may be just text • the message might be a binary stream (exchange serialized objects) • the message might be a function to call (Remote Procedure Call) • We will focus on simple messages for now and look at data serialization later. 6 The exact semantics of these communciation channels varies by platform • Examples on Unix: • Pipes (Anonymous and Named) • Sockets • Message Queues • Examples on Windows: • Pipes (Anonymous and Named) • Sockets • COM 7 A central tenant of Unix systems is that programs should be small and composable • The primary way this is done is using Pipes. • Example: search through all my CMake based projects looking for ones that expect a test to fail. • find ~ -name CMakeLists.txt -print | xargs grep add_test 8 A central tenant of Unix systems is that programs should be small and composable • The | character is a pipe. It connects the standard output of one program to the standard input of the next, forming a simple half-duplex channel. +------------------+ find stdout ->| |-> stdin of xargs +------------------+ 9 Example: Unix Pipes • #include <unistd.h> • create a pipe with pipe giving two integer file descriptors • read from one, write to the other • See example code: unix_pipe/ • pipe, pipe2 - create pipe 10 That’s dumb, what is that good for? • We combine that with fork , which makes a copy of the current process, called the child. • The parent and child process communicate over shared pipe descriptors. • See example code: unix_fork/ , unix_fork_pipe/ • fork - create a child process 11 A cross-platform solution using Qt • The process on Unix using sockets is similar to pipes. • Both have rough equivalents on Windows. • Lets use Qt to do it cross-platform 12 QProcess • QProcess is a Qt class that abstracts a process. You can start them, hijack stdin and stdout, and get their exit status. • See example code: qprocess_example/ • QProcess Class 13 QLocalSocket • QLocalSocket is a class the abstracts a local socket. On Windows this is a named pipe and on Unix this is a local domain socket, but it does not matter to us. The idea is to use QProcess similar to fork and use QLocalSocket to setup the communication. • See example code: qlocalsocket_example/ • QLocalSocket Class 14 Case Study: Message Passing Interface (MPI) • High-Performance Computing is all about leveraging multiple processing units, be they cores, CPUs, or multiple machines. One approach uses seperate processes that communicate over sockets by passing messages. • This is standardized as MPI (there are a few different implementations). 15 Next Actions and Reminders • Read about Qt shared memory.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    15 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us