I don't really get the question, to be honest. But I can vouch for Perforce's efficiency and ability to handle more than one person modifying a file asnychronously, and handling the merging of edits.
In Perforce, if someone checks in a file that you are also modifying, then when you next sync from the server (i.e. get latest files) you get informed that there are some changes that need resolving. The choice on when to do this is up to you. When you "resolve" a file, it does the merge into your local version - and the tools are good for this.
Having a choice on when you do it is important - you may be syncing so you can get some updates not directly related to your task (bugfix, say), and you don't at that stage want to deal with working out if someone else's change to the same files you are working on will affect you. So you carry on, do your build & test, then after that you resolve the files in your own time.
The other case is that you submit your edits without having first synced to the updated file. In this case, Perforce prevents the submission and flags the files to be resolved. Any sensible developer at this stage will do the merge, then recompile and/or test before submitting the change back into Perforce.
What I like about this is that it tries really hard to stop you submitting changes back to the central server that have not been explicitly processed, and hence minimises the chances of breaking the build. The resolve process is easy and very low overhead, so there is not an efficiency issue at all.
Perforce is very explicit in giving you choice and control on how changes are propagated, and backs this up with excellent tools to manage merging of edits. Personally I like choice and the power to exercise choices easily. Doubtless Subversion has its own alternatives too.
I guess it probably comes down to what you are used to - I don't think there is a significant or measurable efficiency issue.