@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
Если у вас одна цель (одна программа или библиотека), то линковщик и так будет вызван единожды.

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

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

Войти через центр авторизации
Похожие вопросы