Как насчет использования dplyr. По сути, вы бы отсортировали столбцы для каждой строки. Не уверен, будет ли это более эффективным или нет. Очевидно, это намного больше строк.
library(dplyr)
df <- data.frame(v1,v2)
# Sort by v1 and v2 elements by row
df.new <- df %>%
mutate(z1 = pmin(v1,v2),
z2 = pmax(v1,v2))
# Build a distinct coding table
df.codes <- df.new %>%
distinct(z1, z2) %>%
mutate(v3 = 1:n())
# Join it back together
df.new %>%
left_join(df.codes, by = c("z1", "z2")) %>%
select(v1, v2, v3)
Спасибо за все ответы после прохождения через других библиотек я заметил их всех, являются вполне сверхсложными для того, что я смотрел.
Я придерживаюсь своей собственной реализации, которая является в основном блокирующейся реализацией очереди вокруг Threading.Thread()
и это работает просто великолепно.
Если Вы имеете это много задач, рассматриваете реализацию сервисной шины или сторонней платформы промежуточного программного обеспечения как BizTalk. Если это слишком много, то Организация очередей сообщения открытым текстом.
Кроме того, если Вы имеете SQL Server и хотите, чтобы очередь более легко сохранялась и управлялась, рассмотрите Брокера SQL Server Service.
Проверьте CCR Microsoft. Это имеет очень эффективный пул потоков и имеет примитивы, которые делают контакт со многими oustanding асинхронными запросами ввода-вывода простым.
Под его моделью, обеспечивая Ваш ввод-вывод является действительно асинхронным, количество потоков, в которых Вы нуждались бы, будет точно количеством ядер на Вашем поле. Что-либо больше - отходы.
Лучшей, которую я видел недавно, является библиотека PowerThreading Jeffery Richter. Вы могли бы также хотеть проверить это видео Канала 9
Хорошая вещь о библиотеке PowerThreading состоит в том, что она делает эффективное использование ThreadPool, позволяя единственному потоку быть совместно использованной через многие запросы.
У меня была та же необходимость как Вы, но мой вопрос формулировался по-другому для достижения очень похожих ответов: Есть ли какой-либо путь к выполнению метода многократно, но руководящих соединений/потоков? (.NET)
.Net 4.0 добавляет Библиотеку Параллели Задачи, которая будет иметь прямую поддержку этого. Если Вы не знаете о нем, это доступно и как автономный CTP на основе.Net 3.5 и как часть Visual Studio 2010 CTP, который был сделан доступным прошлой осенью. Вот ссылка на блог команды, который имеет больше информации и указатель на загрузку.
Я нашел интересное взятие на ThreadPool этим товарищем на CodeProject. Это - инстанцированный ThreadPool (таким образом, не статичный и клочок через потоки), и это имеет несколько функций для настройки производительности.