• J
    config: use getc_unlocked when reading from file · 260d408e
    Jeff King 提交于
    We read config files character-by-character from a stdio
    handle using fgetc(). This incurs significant locking
    overhead, even though we know that only one thread can
    possibly access the handle. We can speed this up by taking
    the lock ourselves, and then using getc_unlocked to read
    each character.
    
    On a silly pathological case:
    
      perl -le '
        print "[core]";
        print "key$_ = value$_" for (1..1000000)
      ' >input
      git config -f input core.key1
    
    this dropped the time to run git-config from:
    
      real    0m0.263s
      user    0m0.260s
      sys     0m0.000s
    
    to:
    
      real    0m0.159s
      user    0m0.152s
      sys     0m0.004s
    
    for a savings of 39%.  Most config files are not this big,
    but the savings should be proportional to the size of the
    file (i.e., we always save 39%, just of a much smaller
    number).
    Signed-off-by: NJeff King <peff@peff.net>
    Signed-off-by: NJunio C Hamano <gitster@pobox.com>
    260d408e
config.c 54.9 KB