Какой тип использовать для хранения изменяемой таблицы данных в памяти в Scala?

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

Как мне лучше всего это реализовать? Аргументы бывают разных типов, включая некоторые перечисления.

В C # я бы обычно использовал DataTable.

  • почему это так?
  • разве OSX не заботится о совместимых API? есть ли какой-то устаревший код, который заставляет это работать медленно?
  • Почему эти числа не совпадают с числами в функциях dispatch_semaphore?
  • sem_wait () и sem_post () работают так же медленно, как и когда их нет (есть разница, но я подумал, что это будет огромная разница между состязанием и нет; я ожидал, что числа вроде того, что было в коде dispatch_semaphore)
  • sem_wait () и sem_post () медленнее при использовании именованных семафоров.
    • Почему? это потому, что семафор должен быть синхронизирован между процессами? возможно, при этом будет больше багажа.
  • dispatch_semaphore_wait () и dispatch_semaphore_signal () работают безумно быстро, когда не вызывают споров (неудивительно, поскольку Apple это много рекламирует).
  • dispatch_semaphore_wait () и dispatch_semaphore_signal () в 3 раза медленнее, чем sem_wait () и sem_post () в состоянии конкуренции
    • Почему это так медленно? для меня это не имеет смысла. Я ожидал, что это будет на одном уровне с sem_t, о котором идет речь.
  • dispatch_once () быстрее, чем pthread_once () , примерно в 10 раз, почему? Единственное, что я могу сказать по заголовкам, это то, что с dispatch_once () нет нагрузки на вызовы функций, чем с pthread_once () .
  • Мотивация: Мне представлены 2 набора инструментов для выполнения работы для семафоров или однократных вызовов (тем временем я фактически нашел другие варианты семафоров, но я проигнорирую их, если они не будут рассмотрены как лучший вариант). Я просто хочу знать, какой инструмент лучше всего подходит для работы (если у вас есть возможность вкручивать винт с помощью Philips или плоской головки, я бы выбрал Philips, если мне не нужно затягивать винт и плоскую головку, если мне нужно затяните винт). Похоже, что если я начну писать утилиты с libdispatch, я не смогу перенести их на другие операционные системы, в которых еще не работает libdispatch ... но это так заманчиво в использовании;)

    В нынешнем виде: Я буду использовать libdispatch, когда мне не нужно беспокоиться о переносимости и вызовах POSIX, когда я это сделаю.

    Спасибо!

    14
    задан David Cairns 13 December 2011 в 03:19
    поделиться