Когда вы копируете блок, что именно вы копируете?
Вы копируете любое состояние, захваченное блоком.Если в этом блоке нет состояния, в котором этот блок, по-видимому, отсутствует, то копия должна быть «свободной», так как блок будет константой (аналогично тому, как работает @ »).
Допустим, я копирую блок дважды, copy1 и copy2.Если я вызываю copy1 и copy2 в одном потоке, вызывается ли одна и та же функция?Я не совсем понимаю, что значат документы для блочных копий: Apple Block Docs
Когда блок копируется, код блока никогда не копируется.Только захваченное государство.Итак, да, вы будете выполнять точно такой же набор инструкций.
Теперь, если я сделаю эту копию снова, copy1 и copy2, но вместо этого я вызову копии в отдельных потоках, теперь какфункции ведут себя?Приведет ли это к некоторому замедлению, поскольку каждый поток пытается получить доступ к одному и тому же блоку?
Данные, захваченные в блоке, никак не защищены от многопоточного доступа, так что нетне замедляйтесь (но вы можете себе представить, что вы можете себе представить синхронизацию параллелизма).
Пробовали ли вы пробовать приложение, чтобы посмотреть, что потребляет циклы ЦП?Кроме того, учитывая, куда вы идете с этим, вы, возможно, захотите познакомиться с вашим дружественным локальным дизассемблером (otool -TtVv binary/or/.o/file
), так как он может быть весьма полезен для определения того, насколько дорогой является действительно блок-копия.
Если вы выполняете выборку и видите много времени в самом блоке, то это всего лишь ваши вычисления, потребляющие много процессорного времени.Если бы блок потреблял процессор во время копирования, вы бы увидели потребление в помощнике по копированию.
Попробуйте создать исходный файл, который содержит несколько блоков разных типов;с параметрами, без, с захваченным состоянием, без, с захваченными блоками с / без захваченного состояния и т. д. и функцией, которая вызывает Block_copy () для каждого.
Разберите это, и вы получите глубокое пониманиео том, что происходит, когда блоки копируются.Лично я считаю, что сборка x86_64 легче читать, чем ARM.(Все это звучит как хороший корм для блогов - я должен написать это).