Задать вопрос
@Louter
Программист

Как параллельный вызов программ преобразовать в последовательный через очередь задач?

Дано: сборка make -j8 даёт существенный прирост скорости при компиляции, но при работе линковщика ld память отъедается до того, что swap заполняется почти полностью.
Требуется: найти способ вызывать линковщики не параллельно, а последовательно, сохранив параллельный запуск компиляторов.
Может есть готовые решения или самому придётся делать диспетчер очереди запросов к линковщику?

ОС: Linux (CentOS 7)

UPD:
Решение в комментариях, использовать flock
Родился такой скрипт:
neck
#!/bin/bash
NAME=`basename $0`
DIR=`dirname $0`
ARGS=$@
PATH=${PATH//$DIR/''}

if [ $NAME == 'neck' ]
then
  exit 0
fi

function get_origin {
  ORIGIN=`which --skip-alias --skip-functions $NAME 2>&1`
  local res=$?

  if [ $res -ne 0 ]
  then
    echo $res
    echo "Origin file $NAME not found"
    exit 1
  fi
}

function get_lock_file {
  LOCK_FILE="/tmp/${ORIGIN//\//_}.lock"
}

get_origin
get_lock_file
flock $LOCK_FILE $NAME $ARGS
exit $?
  • Вопрос задан
  • 322 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
Если у вас одна цель (одна программа или библиотека), то линковщик и так будет вызван единожды.

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

Войдите, чтобы написать ответ

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