Uploaded image for project: 'Log4cxx'
  1. Log4cxx
  2. LOGCXX-546

Multi threaded applications run at single threaded speed

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 0.12.0
    • 0.13.0
    • None
    • None

    Description

      The benchmark "throughput" (https://github.com/apache/logging-log4cxx/pull/87) shows the rate of log4cxx calls to a disabled logger is greatly reduced when multiple threads are active.

      In version 11.0 the call rate to a disabled logger when multiple threads are active is similar to when only a single thread is active.

      Accessing repository using rep = repository.lock() in Logger::isDisabled() causes all threads to be serialized when they test if their logger is enabled.

      I suggest Hierarchy hold std::weak_ptr for the Loggers instead of std::shared_ptr in LoggerMap and for the root logger. 

      Options:
      1. Logger could hold a raw pointer to the LoggerRepository. The LoggerRepository destructor should then do

      for (auto& item : this->loggers)
      {
        if (auto pLogger = item.second.lock())
          pLogger->resetRepository();
      }

      Logger can then test for a NULL repositiory instead of lock() on the weak pointer.

      2. Logger could hold a shared pointer to the LoggerRepository.

      Attachments

        Activity

          People

            Unassigned Unassigned
            stephen.webb Dr Stephen L S Webb
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: