пятница, 1 июня 2012 г.

Производительность, это очень сложно. Существует огромное количество факторов, не имеющих прямого отношения к логике работы программы, которые следует учесть, для того, чтобы приложение эффективно использовало ресурсы процессора.
Вот наглядный пример:
Код, использующий один счетчик и InterlockedIncrement работает, в среднем, в три раза медленнее нежели код, исползующий класс ConcurrentCounter. Почему это происходит, должно быть достаточно очевидно. InterlockedIncrement блокирует шину памяти на время выполнения, т.е. по сути, все потоки получают доступ к переменной по очереди, синхронно.

  • За какой асбракцией не пряталась бы инструкция lock xchg, знать что именно происходит на низком уровне все равно придется.
  • Так же придется знать что такое TLB, write buffer, как происходит инвалидация кэша, что такое false sharing и тд.
  • Загрузка процессора под 100% вовсе не означает что он используется эффективно.
  • Хотелось бы все эти заботы переложить на плечи разработчиков библитек и инструменов разработки.

Комментариев нет: