Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
cat updatedeps.sh
#!/bin/bash
# Enable swap, run composer update, disable swap. That's it.
if [ ! -f /swapfile ]; then
sudo dd if=/dev/zero of=/swapfile bs=1024 count=1024m
sudo mkswap /swapfile
fi
sudo swapon /swapfile
composer update
sudo swapoff /swapfile
3) Как так получается, что отключение сборки мусора ускоряет выполнение скрипта в десять раз? Что не так со сборщиком мусора? В нем нет поколений объектов, и ему приходится перебирать все объекты при каждой сборке?Резкое падение эффективности сборки мусора в условиях нехватки памяти — это общая беда всех сборщиков мусора. Даже при наличии поколений объектов, десятая сборка мусора подряд в любом случае затащит все объекты в перманентное поколение.
Даже при наличии поколений объектов, десятая сборка мусора подряд в любом случае затащит все объекты в перманентное поколение.Да, затащит. И они будут проверяться значительно реже, чем в других поколениях. В том и смысл.
import time
import gc
gc_counters = [0, 0, 0]
def gc_cb(phase, info):
gc_counters[info['generation']] += 1
# gc.disable()
gc.callbacks.append(gc_cb)
class Node(object):
def __init__(self, children):
self.children = children
@classmethod
def tree(cls, depth, numchildren):
if depth == 0:
return []
return [
cls(cls.tree(depth-1, numchildren))
for _ in range(numchildren)
]
start = time.time()
ref = Node.tree(9, 5)
print('>>>', gc_counters, time.time() - start)
>>> [19180, 1744, 34] 10.722499132156372
>>> [0, 0, 0] 4.036884069442749
<?php
class Node {
public function __construct($children) {
$this->children = $children;
}
public static function tree($depth, $numchildren) {
if ($depth == 0) {
return [];
}
$children = [];
for ($i=0; $i < $numchildren; $i++) {
$children[$i] = new self(self::tree($depth - 1, $numchildren));
}
return $children;
}
}
ini_set('memory_limit', '-1');
// gc_disable();
$start = microtime(true);
$ref = Node::tree(9, 5);
print '>>> '.(microtime(true) - $start)."\n";
>>> 7.6519370079041
>>> 3.9215548038483
Как Composer на 70% ускорили