A FreeRtos Task is more or less the same thing as a Posix Thread, just different nomenclature because one is an RTOS and one is a preemptive multi tasking OS with both Threads and Processes, people use the words interchangeably because they are interchangeable!
In most cases all free rtos tasks share an address space, and you can use volatile globals (for example) for inter task communication, but the queue provided by the rtos has the advantage that it takes care of locking and blocking automatically.
For example, I did a low speed serial thing where the UART interrupt read from and wrote to a couple of FreeRtos Queues, the next level up then just blocked on the uart RX queue and would be scheduled when something got added to that queue, when it had a complete valid command it would write the command and arguments into another Queue that would then be processed by my main application. Meanwhile other Tasks were doing DSP and driving the screen.
I had something similar for I2C (which is notoriously slow), stuff a message into the queue and get un blocked once the exchange has happened, meanwhile other tasks continue to run.
Nothing that could not be done with a super loop and state machines of course, but far more convenient to write, and (mostly) easier to reason about.
One targets Posix is writing to run on a Unix type environment (AWS? Linux? BSD? Whatever), and Freertos when targeting the sort of platform where that makes sense (small embedded MIPS, ARM M4, that sort of thing).
Posix also has Fork available, so separate Processes (Running in isolated address spaces) are a thing on that platform while they don't (usually) exist on the much lighter weight RTOS.
Regards, Dan.