There's nothing special about threads vs processes in Linux. mmap works the same, the challenge is to map the same file. You can share a path, pass a file descriptor via fork or unix domain socket, among other techniques.

That induces disk I/O overhead (even if it somehow doesn't impact IPC performance)

It doesnt. Processes can share memory

The file doesn’t have to be disk-backed.

Don't you need something mounted for that?

No, you can use a memfd.

And `/dev/shm/` (which postgres uses by default on most Unix platforms)