Hello Maciej Saczuk,
The difference is in the logical separation of tasks that can use private pools. If a task opened a private message pool, it is the only one task that can receive messages from the pool.
You can send message to the private queue any time if you know the pool ID. The message can be sent from any accessible memory, e.g. from a task stack. It is copied afterwards to the queue.
Regards,
MartinK