Обработка больше чем 1 024 дескрипторов файлов, в C на Linux

Данные:

x <- read.table(header = TRUE, stringsAsFactors = FALSE, text = "
A  B
1  2
3  4
3  2
2  1")

Рабочий код:

library(data.table)
x[ head(order(A, B, decreasing = TRUE), n = 1), ]
#    A B
# 1: 3 4

Альтернатива:

x[ order(A, B, decreasing = TRUE)[1], ]

действительна, но выдает строку NA, когда nrow(x)==0, где я бы предпочел / ожидал 0 строк. Например:

x[0,][ order(A, B, decreasing = TRUE)[1], ]
#     A  B
# 1: NA NA
x[0,][ head(order(A, B, decreasing = TRUE), n = 1), ]
# Empty data.table (0 rows) of 2 cols: A,B

Еще одна альтернатива, мое первое предложение:

x[ order(A, B, decreasing = TRUE), ][1,]

Это совершенно законно, но, как предположил @thelatemail (спасибо!), Оно гораздо менее эффективно в этом создает весь (реструктурированный) кадр перед тем, как дать вам первый ряд.

Еще одна альтернатива (из толпы, еще раз спасибо thelatemail):

setorder(x, -A, -B)[1]
7
задан Andrioid 11 May 2009 в 17:22
поделиться

2 ответа

Спасибо за все ваши ответы, но я думаю, что нашел виновника. После переопределения __FD_SETSIZE в моей программе все стало двигаться намного быстрее. Конечно, ulimit тоже нужно поднять, но без __FD_SETSIZE моя программа никогда не воспользуется им.

7
ответ дан 7 December 2019 в 10:07
поделиться

См. страницу с проблемой C10K . Он содержит подробное обсуждение того, как достичь цели «10000 одновременных подключений» при сохранении высокой производительности и управлении обслуживанием каждого клиента.

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

4
ответ дан 7 December 2019 в 10:07
поделиться
Другие вопросы по тегам:

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