Hi Bram Moolenaar, you wrote:

>> It's Windows, but on Linux it should be similar.
> 
> I would not assume it's similar until there is proof.
> 
Of course. I'm going to investigate it there.

> 
> This sounds like a bug in getc().  It should know that only one thread
> is reading the file and skip the locking.  I don't think we should fix
> library bugs in Vim, unless it's crashing or another significant problem.
> 
It can't be a bug. I might be missing what you mean, but I can't see how it can 
know that only one thread is reading a file. It doesn't have a clue whether you 
gave this FILE * to other threads or not. It tries to be lightweight - as I 
described in a separate mail it uses InterlockedIncrement/Decrement but they 
are not that lightweight - they don't require switching to kernel mode but 
still take about 200 cycles of CPU each.

The only optimization that I see could be avoiding blocking (and even trying to 
block) in case if there is only one thread in current process and if there is 
guarantee that this particular call is guaranteed not to create any threads. 
But 1) it still may be expensive and 2) Vim has some background threads anyway, 
probably.

> Perhaps you can already get a big increase by not compiling for
> debugging?  With MSVC this usually has a big impact.  Also largely
> defeats profiling with debugging enabled.
> 
I do _all_ performance measurements using optimized version of binary with 
symbols. This is just a must for performance tuning. 

-- 
Alexei Alexandrov

Reply via email to