ufm: (bald-headed)
[personal profile] ufm
Взял с розеты два исходника. Один на Go (http://rosettacode.org/wiki/Atomic_updates#RWMutex) и один на D (http://rosettacode.org/wiki/Atomic_updates#D). Дополил до более-менее одтнакового алгоритма.
В результате вариант на D показывает в районе 6M операций в секунду, вариант на Go — в районе 8M.
Вот как они это делают?
Кстати, варианта на rust-е — нет. Может есть кто из фанатов раста — сделает?

Вариант на D: http://pastebin.com/QJZaz8di
Вариант на Go: http://pastebin.com/aVJMBueT

Версии компиляторов:
И там и там — текущие релизы.
Go — go version go1.4 linux/amd64
D — DMD64 D Compiler v2.066.1

Originally published at U.F.M's Homepage. You can comment here or there.

(no subject)

Date: 2015-01-19 15:56 (UTC)
From: [identity profile] http://users.livejournal.com/_slw/
тебя кто-то про go обманул:

  PID USERNAME   PRI NICE   SIZE    RES STATE   C   TIME   WCPU COMMAND
 8455 slw         52    0  4428K  2124K uwait   0   0:56 59.96% go3{go3}
 8455 slw         52    0  4428K  2124K uwait   3   0:53 57.47% go3{go3}
 8455 slw         90    0  4428K  2124K CPU2    2   0:41 56.88% go3{go3}
 8455 slw         88    0  4428K  2124K CPU3    3   0:44 51.07% go3{go3}


с зелеными тредами жил бы он на одном ядре. может кто-то хотел сказать N:M, да в терминах запутался?

(no subject)

Date: 2015-01-19 16:12 (UTC)
From: [identity profile] ufm.livejournal.com
Оно естественно N:M (точнее - по умолчанию - 1:M, но можно явно сказать сколько нативных тредов запускать, я в программах обычно указываю так: runtime.GOMAXPROCS(runtime.NumCPU())).
С другой стороны - всё что не 1:1 - оно как-бы по определению зелёное, нет? Это всё равно не настоящие треды.