As I described in mailing list, we need to manage the messages per Vertex.
Currently, sender-side creates and sends the GraphJobMessage object per each message, receiver-side groups messages by Vertex. To simplify grouping process, we used sorting and sequential processing.
If we manage the outgoing messages per Vertex, we don't need to use the sorted message queue. So we can improve the memory efficiency and the performance by multi-threading.