Hi Mickael,

    b) has some magic synchronization which i dont see


It could be a bit of all ;)

I found some magic synchronization. Actually parallel write is avoided in

org.eclipse.core.internal.resources.File.create(InputStream, int,
IProgressMonitor){
    ...
    workspace.prepareOperation  // global(!) lock
    ... (actual write) ...
    workspace.endOperation(rule, true); // global unlock
    ...
}

Daemon Thread [ForkJoinPool-1-worker-3] (Suspended)
    waiting for: Semaphore  (id=374)
    Object.wait(long) line: not available [native method]
    Semaphore.acquire(long) line: 44
    OrderedLock.doAcquire(Semaphore, long) line: 173
    OrderedLock.acquire(long) line: 109
    OrderedLock.acquire() line: 85
    WorkManager.checkIn(ISchedulingRule, IProgressMonitor) line: 125   
   <------------- a global lock
    Workspace.prepareOperation(ISchedulingRule, IProgressMonitor) line:
2263
    File.create(InputStream, int, IProgressMonitor) line: 106
    ConcurrentModificationTest.writeClassFileContents(IFile, String)
line: 97
...

Thats probably a (or the?) reason you see only little speedup during
parallel builds.

Can you please elaborate about a concrete case you think can be faulty
with current code? Ideally in a test case you could submit through Gerrit?

see
https://git.eclipse.org/r/c/platform/eclipse.platform.resources/+/179934

Jörg
_______________________________________________
platform-dev mailing list
platform-dev@eclipse.org
To unsubscribe from this list, visit 
https://www.eclipse.org/mailman/listinfo/platform-dev

Reply via email to