title: Usage of non-blocking send and blocking receive in MPI?
body: <p>I am trying to implement master-worker program.</p>
  
  <p>My master has jobs that the workers are going to do. Every time a worker completes a job, he asks for a new job from the master, and the master sends it to him. The workers are calculating minimal paths. When a worker finds a minimum that is better than the global minimum he got, he sends it to everyone including the master.</p>
  
  <p>I plan for the workers and masters to send data using <code>MPI_ISEND</code>. Also, I think that the receive should be blocking. The master has nothing to do when no one has asked for work or has updated the best result, so he should block waiting for a receive. Also, each worker should, after he has done his work, wait on a receive to get a new one.</p>
  
  <p>Nevertheless, <strong><em>I'm not sure of the impact of using non-blocking asynchronous send, and blocking synchronous receive</em></strong>.</p>
  
  <p>An alternative I think is using <code>MPI_IPROBE</code>, but I'm not sure that this will give me any optimization.</p>
  
  <p>Please help me understand whether what I'm doing is right. Is this the right solution? </p>