In GNOME VFS there is a special API call for copying and moving files, while providing the caller with progress information while the operation is being performed. GNOME VFS is able to automatically optimize the case in which a file is moved through two different locations on the same physical file system, by using the information provided by the source and destination plug-ins.
When this API call is used, all the file transfer is performed in a separate thread or process, which dispatches the progress information to the main thread/process using the same mechanism that is used by the other asynchronous calls.
In order to reduce the impact of dispatching progress information across process/thread boundaries, the actual calls take place periodically, at a rate specified by the programmer. In the case of a file manager, for example, this will be done only a few times in a second, just enough to make sure the GUI is updated the way the user would expect.