Быстрее разветвление больших процессов на Linux?

Codepen: https://codepen.io/anon/pen/qvgxRJ

Чтобы решить эту проблему, создайте vue filter. Код: Vuejs время назад фильтр

    filters: {
      timeago: function (pdate, ctime) {
         if (!pdate || !ctime) return ''
         return moment(pdate).from(ctime)
       }
     },

применить этот фильтр в HTML

        {{act.created_at | timeago(currenttime)}}

Он рассчитывает время назад на основе текущего времени. Затем в setInterval обновляйте текущее время каждые 50 секунд. Он будет обновлять компонент каждые 50 секунд.

           data:()=>({
             currenttime: Date.now(),
             timer: ''
             }),
     created() {
        this.fetchRecentActivityData()
        this.timer = setInterval(() => {this.currenttime = Date.now()}, 50000);
    }

Окончательный кодекс.

   export default {
         data:()=>({
         currenttime: Date.now(),
         timer: ''
         }),
         filters: {
          timeago: function (pdate, ctime) {
             if (!pdate || !ctime) return ''
             return moment(pdate).from(ctime)
           }
         },
        created() {
            this.fetchRecentActivityData()
            this.timer = setInterval(() => {this.currenttime = Date.now()}, 50000);
        },
        beforeDestroy() {
            clearInterval(this.timer)
        },
        computed: {
            ...mapGetters(["recentActivity"])
        },
        methods: {
            ...mapActions(["fetchRecentActivityData"]),
        },
    }

в HTML

   
  • {{act.created_at | timeago(currenttime)}}
    by
  • 30
    задан tshepang 2 May 2014 в 04:28
    поделиться

    3 ответа

    Итог : Я собирался пойти по пути подпроцесса вспомогательного процесса, как это было предложено другими ответами здесь, но потом я наткнулся на это , использующее огромную поддержку страниц для улучшения производительность вилки.

    Попробовав сам, используя libhugetlbfs , чтобы просто заставить все mallocs моего приложения выделять огромные страницы, я теперь получаю около 2400 форкс / с независимо от размера процесса (через ассортимент меня все равно интересует). Удивительный.

    13
    ответ дан timday 27 November 2019 в 23:40
    поделиться

    Если вы знаете количество подпроцессов заранее, было бы разумно предварительно выполнить форк вашего приложения при запуске, а затем распространить информацию execv через трубу. В качестве альтернативы, если в вашей программе есть какое-то «затишье», было бы разумно заранее выполнить форк одного или двух подпроцессов для быстрого изменения в более позднее время. Ни один из этих вариантов не решит проблему напрямую, но если любой из подходов подходит для вашего приложения, он может позволить вам обойти проблему.

    4
    ответ дан 27 November 2019 в 23:40
    поделиться

    Вы действительно измеряли, сколько времени занимают форки? Цитируя страницу, на которую вы ссылались,

    У Linux никогда не было этой проблемы; поскольку Linux использует семантику копирования при записи внутри, Linux копирует страницы только тогда, когда они изменяются (на самом деле, есть еще некоторые таблицы, которые должны быть скопированы; в большинстве обстоятельств их накладные расходы не существенны)

    Так что количество форков не показывает, насколько велики будут накладные расходы. Вы должны измерять время, потребляемое вилками, причем (это общий совет) потребляемое только теми вилками, которые вы действительно выполняете, а не путем сравнения максимальной производительности.

    Но если вы действительно поняли, что форкинг большого процесса - это медленно, вы можете породить небольшой вспомогательный процесс, направить главный процесс на его вход и получать от него команды exec. Маленький процесс будет fork и exec эти команды.

    posix_spawn()

    Эта функция, насколько я понимаю, реализована через fork/exec в настольных системах. Однако во встроенных системах (в частности, в системах без MMU на борту) процессы порождаются через системный вызов, интерфейсом к которому является posix_spawn или аналогичная функция. Цитирую информативный раздел стандарта POSIX, описывающий posix_spawn:

    • Обмен адресами обычно слишком медленный для среды реального времени.

    • Динамическая трансляция адресов доступна не везде, где POSIX может быть полезен.

    • Процессы слишком полезны, чтобы просто отказаться от POSIX всякий раз, когда он должен работать без трансляции адресов или других служб MMU.

    Таким образом, POSIX нужны примитивы создания процессов и выполнения файлов, которые могут быть эффективно реализованы без трансляции адресов или других служб MMU.

    Я не думаю, что вы получите пользу от этой функции на настольном компьютере, если ваша цель - минимизировать затраты времени.

    8
    ответ дан 27 November 2019 в 23:40
    поделиться
    Другие вопросы по тегам:

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