#cocoa-touch #performance
#cocoa-touch #Производительность
Вопрос:
Я много раз видел, как @property определялся как неатомный по соображениям производительности. Есть ли какие-либо доказательства того, что это того стоит?
Ответ №1:
Когда свойство не объявлено как nonatomic
, синтезированный инструмент доступа будет использовать блокировки, чтобы гарантировать потокобезопасность свойства. Когда блокировка используется без необходимости, она добавляет ненужные сообщения в вашу программу. Сама операция блокировки также должна быть атомарной, что означает, что процессор заблокирует шину памяти. Это может замедлить работу вашей программы, а также других. Если к свойству обращаются нечасто, вы, вероятно, не заметите разницы, но вы определенно захотите использовать его, если свойство будет использоваться часто. В целом, однако, почему бы не использовать его? Это несколько дополнительных символов, которые потенциально могут ускорить работу вашей программы.
Комментарии:
1. На самом деле меня беспокоит, стоит ли риск столкнуться с каким-либо тупиковым состоянием / состоянием гонки / чем угодно, чтобы это дополнительное повышение производительности.
2. Вы никогда не должны использовать
nonatomic
то, что может быть использовано в нескольких потоках. Думаю, я предположил, что это очевидно, поскольку атомарность важна, когда к чему-то можно получить доступ несколькими потоками, и вы спрашивали, выгодно ли использовать это в однопоточных приложениях.3. Вопрос был «стоит ли оно того?» — и на этот вопрос нельзя ответить, не измерив конкретный код.
4. @James Вот почему я не сказал ни да, ни нет. Я описал причины, по которым это может принести пользу, и указал, что нет причин не использовать это, когда вы можете. Не похоже, что для этого требуется рефакторинг всей программы. Я мог бы ответить аналогичным образом на вопрос типа «Стоит ли не размещать
sleep(1)
после каждого оператора?».5. @ughoavgfhw, мне следовало более решительно изложить свою позицию. Добавлять неатомное неправильно до тех пор, пока вы не измерите его фактическое влияние на свой собственный код. nonatomic — это дополнительный код, который следует добавлять только при необходимости. Другими словами, преждевременная оптимизация неверна — и это именно то, что означает добавление неатомного.