Производительность, это очень сложно. Существует огромное количество факторов, не имеющих прямого отношения к логике работы программы, которые следует учесть, для того, чтобы приложение эффективно использовало ресурсы процессора.
Вот наглядный пример:
Вот наглядный пример:
Код, использующий один счетчик и InterlockedIncrement работает, в среднем, в три раза медленнее нежели код, исползующий класс ConcurrentCounter. Почему это происходит, должно быть достаточно очевидно. InterlockedIncrement блокирует шину памяти на время выполнения, т.е. по сути, все потоки получают доступ к переменной по очереди, синхронно.
- За какой асбракцией не пряталась бы инструкция lock xchg, знать что именно происходит на низком уровне все равно придется.
- Так же придется знать что такое TLB, write buffer, как происходит инвалидация кэша, что такое false sharing и тд.
- Загрузка процессора под 100% вовсе не означает что он используется эффективно.
- Хотелось бы все эти заботы переложить на плечи разработчиков библитек и инструменов разработки.
Комментариев нет:
Отправить комментарий