Alexei Alexandrov wrote:

> > 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.

Hmm, getc() is apparently preparing for the worst and isn't optimized
for the 98% of the situations where there is only one thread reading
from the fd.  With the result that the, very often used, getc() is slow.

Besides using getc_unlocked() we could use read() and do our own
buffering.  That can't bee very complicated.  And we don't need to
figure out if the getc_unlocked() function is available.


-- 
hundred-and-one symptoms of being an internet addict:
102. When filling out your driver's license application, you give
     your IP address.

 /// Bram Moolenaar -- [EMAIL PROTECTED] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

Reply via email to