Как узнать то, чего ожидает mach_msg_trap?

Используя именованные группы и таблицу отправки:

r = re.compile(r'(?P<cmd>foo|bar|baz)(?P<data>.+)')

def do_foo(data):
    ...

def do_bar(data):
    ...

def do_baz(data):
    ...

dispatch = {
    'foo': do_foo,
    'bar': do_bar,
    'baz': do_baz,
}


m = r.match(var)
if m:
    dispatch[m.group('cmd')](m.group('data'))

С определенным самоанализом можно автоматически сгенерировать regexp и таблицу отправки.

31
задан tobiasbayer 26 October 2012 в 20:12
поделиться

2 ответа

Оказывается, мое приложение фактически не тратя 65% своего времени на функцию mach_msg_trap . Это была ошибка конфигурации инструментов с моей стороны.

Инструмент Sampler по умолчанию имеет значение All Sample Counts , это будет измерять все потоки независимо от их состояния.

Вместо этого переключитесь на Running Sample Время , которое будет отражать текущую фактическую рабочую нагрузку. Снимок экрана с инструментами http://developer.apple.com/library/mac/qa/qa2009/images/qa1619_running_sample_times.png[1217 visible

24
ответ дан 27 November 2019 в 22:47
поделиться

Если вы не ожидаете, что ваш основной поток будет делать что-либо, кроме ожидания в этом фоновом потоке (или ожидания ввода пользователя), беспокоиться не о чем - в вашем приложении просто ничего нет делать большую часть времени.

Если вы ожидаете, что основной поток будет активно делать что-то еще, обновите свой вопрос, чтобы описать это. В этом случае вам может потребоваться просмотреть полные стеки вызовов mach_msg_trap, поскольку они часто находятся в нижней части стека вызовов, где фактическое расточительство времени увеличивается.

2
ответ дан 27 November 2019 в 22:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: