Хотя я думаю, что лучше всего использовать один экземпляр Rserve в Linux и позволить ему просто разветвлять подпроцессы для параллельной обработки, это может совсем не ускорить обработку. Из вашего вопроса неясно, интенсивно ли используется приложение, и много одновременных запросов обрабатываются постоянно. Если это так, я предполагаю, что ваш код R интенсивно использует ЦП, и различные процессы просто должны совместно использовать процессорное время, увеличивая время, необходимое для завершения.
Я протестировал именно такой сценарий и нашел эти результаты с top
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
33839 ***** 20 0 269792 57104 3496 R 10.3 1.5 0:15.33 Rserve
33847 ***** 20 0 269776 57100 3496 R 10.3 1.5 0:09.86 Rserve
33849 ***** 20 0 269792 57104 3496 R 10.3 1.5 0:08.20 Rserve
33855 ***** 20 0 269528 56840 3496 R 10.3 1.5 0:04.92 Rserve
29725 ***** 20 0 268872 56836 4020 R 10.0 1.5 1360:13 Rserve
33841 ***** 20 0 269784 57100 3496 R 10.0 1.5 0:14.42 Rserve
33843 ***** 20 0 269796 57104 3496 R 10.0 1.5 0:12.50 Rserve
33844 ***** 20 0 269792 57104 3496 R 10.0 1.5 0:11.72 Rserve
33852 ***** 20 0 269512 56836 3496 R 10.0 1.5 0:06.38 Rserve
33856 ***** 20 0 269520 56836 3496 R 10.0 1.5 0:04.05 Rserve
33842 ***** 20 0 269776 57100 3496 R 9.3 1.5 0:13.20 Rserve
33851 ***** 20 0 269784 57100 3496 R 9.3 1.5 0:06.69 Rserve
33857 ***** 20 0 269512 56836 3496 R 9.3 1.5 0:03.15 Rserve
33834 ***** 20 0 269792 57112 3496 R 9.0 1.5 0:18.56 Rserve
33835 ***** 20 0 269784 57100 3496 R 9.0 1.5 0:17.33 Rserve
33837 ***** 20 0 269776 57100 3496 R 9.0 1.5 0:16.46 Rserve
33846 ***** 20 0 269784 57100 3496 R 9.0 1.5 0:10.17 Rserve
33848 ***** 20 0 269796 57104 3496 R 9.0 1.5 0:08.61 Rserve
33853 ***** 20 0 269532 56840 3496 R 9.0 1.5 0:05.34 Rserve
33858 ***** 20 0 269532 56840 3496 R 9.0 1.5 0:02.27 Rserve
33838 ***** 20 0 269796 57104 3496 R 8.6 1.5 0:15.74 Rserve
Сумма %CPU составляет 200%, что соответствует двум доступным ядрам CPU.
Как видите, процессы имеют одинаковый приоритет (PR=20), а доли %CPU почти равны, около 10%, так что всем им будет выделено только 1/10 часть процессорного времени и, следовательно, они займут В 10 раз больше времени на выполнение по сравнению со случаем всего с одним экземпляром Rserve.
Это не в 20 раз дольше, потому что один процесс Rserve будет использовать только одно ядро ЦП, оставляя другое ядро «спящим».
Вам просто нужно больше процессоров, если вы хотите ускорить вычисления. Кроме того, если вы не хотите, чтобы 51-му (или 101-му, или 1001-му) одновременно работающему пользователю было отказано в доступе, лучше реализовать очередь сообщений. Вы можете создать несколько рабочих для очереди, которые могут распределять рабочую нагрузку между многими процессорами на разных машинах.
person
R. Schreurs
schedule
24.11.2016