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 07:47 (UTC)
From: [identity profile] nms.livejournal.com
Для чистоты стиля укажи версии верстаков ;-)

(no subject)

Date: 2015-01-19 07:53 (UTC)
From: [identity profile] ufm.livejournal.com
И там и там - текущие релизы.
Go - go version go1.4 linux/amd64
D - DMD64 D Compiler v2.066.1

(no subject)

Date: 2015-01-19 12:22 (UTC)
From: [identity profile] fi_mihej.livejournal.com
Тут (http://thedeemon.livejournal.com/95273.html) упоминалось и на практике показывалось что DMD - делает далеко не самый быстрый код. Лучше LDS использовать.

(no subject)

Date: 2015-01-19 12:57 (UTC)
From: [identity profile] http://users.livejournal.com/_slw/
код. быстрый. при lock congestion. o. may. god.
расстрелы, только расстрелы.

(no subject)

Date: 2015-01-19 14:08 (UTC)
From: [identity profile] fi_mihej.livejournal.com
Может и так - не вникал ни в проблему, ни в сам D.

(no subject)

Date: 2015-01-19 14:31 (UTC)
From: [identity profile] ufm.livejournal.com
Ну я как-бы не готов LLVM разворачивать ради этого. Да и не уверен я, что тут можно что-то особо компилятором соптимизировать - это, практически, чистый тест реализации мьютексов.

(no subject)

Date: 2015-01-19 15:06 (UTC)
From: [identity profile] http://users.livejournal.com/_slw/
ты, кстати, понимаешь, что (если отбросить энтропию) все игрища могут идти только на уровне "как быстро мы решаем что вместо спинлоков надо переходить на мутексы, т.е. отдавать управление в ос (т.е. по сути использовать pthread) или наоборот"?

(no subject)

Date: 2015-01-19 15:53 (UTC)
From: [identity profile] ufm.livejournal.com
Ну дело в том, что "чистая" реализация на тредах - только в C. И, наверное, в D - я, честно говоря не понял как там треды реализованы. В GO - зелёные треды со всеми вытикающими.

(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 - оно как-бы по определению зелёное, нет? Это всё равно не настоящие треды.

(no subject)

Date: 2015-01-21 14:25 (UTC)
From: [identity profile] ufm.livejournal.com
Ты будешь смеяться....