golang vs erlang
2014-04-19 07:16Запускаем 100000 процессов, каждый из которых считает сумму чисел от 0 до 100000
Ну что… 52 секунды на эрланге супротив 2.2 на golang. Это, конечно, ожидаемо.
Но вот что в голанге «лёгкие процессы» — это они, конечно, гонят. Ибо попытка запустить на голанге 1 мульён проццессов привёл к выжиранию памяти и уходу машины в своп.
Ерланг, понятно дело, сделал этот мульён и особо не подавился. Причем 1000000 процессов считающих сумму от 0 до 10000 и 10 процессов, считающих сумму от 0 до 1000000000 колбасились примерно одно и тоже время. первый вариант 53 секунды, второй — 51.
Originally published at U.F.M's Homepage. You can comment here or there.
(no subject)
Date: 2014-04-19 10:09 (UTC)(no subject)
Date: 2014-04-19 10:16 (UTC)Хоть 4.
also, это процессы внутри виртуальной машины, что в go, что в erlang.
(no subject)
Date: 2014-04-19 10:20 (UTC)(no subject)
Date: 2014-04-19 11:22 (UTC)(no subject)
Date: 2014-04-19 10:25 (UTC)# echo 4194403 > /proc/sys/kernel/pid_max
bash: echo: write error: Invalid argument
# sysctl kernel.pid_max=4194403
sysctl: setting key "kernel.pid_max": Invalid argument
kernel.pid_max = 4194403
(no subject)
Date: 2014-04-19 11:21 (UTC)root@oxpa-desktop:~# grep pid_t /usr/src/linux-source-3.2.0/linux-source-3.2.0/include/asm-generic/posix_types.h
#ifndef __kernel_pid_t
typedef int __kernel_pid_t;
root@oxpa-desktop:~# grep pid_t /usr/src/linux-source-3.2.0/linux-source-3.2.0/include/linux/types.h
typedef __kernel_pid_t pid_t;
Там другой забавный нюанс:
root@oxpa-desktop:~# cat /sys/kernel/slab/mm_struct/object_size
896
root@oxpa-desktop:~# cat /sys/kernel/slab/task_struct/object_size
5888
И ещё, я не помню где это посмотреть, 4к памяти уходит на стек ядра под каждый процесс. Если я не натупил с размерами, это почти 10 гигов памяти на 1кк процессов (на моём десктопе). Лично у меня несколько меньше даже с учётом свопа %)
Блин, к чему это я?
(no subject)
Date: 2014-04-19 13:49 (UTC)(no subject)
Date: 2014-04-19 11:29 (UTC)(no subject)
Date: 2014-04-19 13:51 (UTC)