ufm: (Default)
[personal profile] ufm

Причем в плохом смысле этого слова.
Простенькая и неправильная программа: http://pastebin.com/fYE2CvUS

Неправильная, потому что в summ ко окончанию будет черти что (почему, я надеюсь, объяснять не нужно).
Но странно не это. Странно другое.
Запускаем:
$ time ../../hello.go
summ == 2564618148

real 0m4.182s
user 0m15.373s
sys 0m0.340s

А теперь исправляем 18 строчку на summ += 1 (или summ++ — даёт такой-же эффект)
$ time ../../hello.go
summ == 2367670838

real 0m15.969s
user 1m2.116s
sys 0m0.428s

Причем ладно бы эти варианты были атомарными, в отличие от «summ = summ +1″, тогда понятно было-бы тормозилово. Но так ведь нет.

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

(no subject)

Date: 2014-05-07 01:37 (UTC)
From: [identity profile] dasblinkenlight.livejournal.com
Круто - я бы не удивился, если бы было наоборот, но чтобы вот так...

Я бы немедленно запостил этот код на Stack Overflow - наверняка там найдется кто-то если не из разработчиков, то по крайней мере из сильных почитателей языка, кто сможет объяснить такое необычное поведение.

(no subject)

Date: 2014-05-07 08:40 (UTC)
From: [identity profile] ufm.livejournal.com
Как мне тут подсказывают - это просто корявый кодогенератор/оптимизатор в gc6. Он иногда в регистре всё это считает, иногда в памяти.

Надо будет gcc-шный вариант go пошшупать - может там оно более правильное.

(no subject)

Date: 2014-05-07 02:26 (UTC)
From: [identity profile] avnik.livejournal.com
Я так понимаю, потому что io нигде нет, и переключается оно между горутинами тут всемьма иногда.

PS ну и sync/atomic же чтобы правильно считало

(no subject)

Date: 2014-05-07 08:02 (UTC)
From: [identity profile] ufm.livejournal.com
Какая связь между тем, сколько раз оно между горутинами оно переключается, способом прибавления еденицы и общим временем выполнения?
Как сделать подсчёт правильным я знаю 4 способа - я сразу написал, что разговор не про это.

(no subject)

Date: 2014-05-07 06:12 (UTC)
From: [identity profile] theiced.livejournal.com
языки с мутабельными данными надо запрещать

(no subject)

Date: 2014-05-07 08:04 (UTC)
From: [identity profile] ufm.livejournal.com
Хватит нам одного ерланга. :)

(no subject)

Date: 2014-05-07 10:24 (UTC)
From: [identity profile] round-tuit.livejournal.com
Федечка, извини, оффтоп - я у тебя в спам улетаю? Ты мне два раза не отвечаешь.

(no subject)

Date: 2014-05-07 14:40 (UTC)
From: [identity profile] ufm.livejournal.com
А ты куда пишешь? Пиши на ufm@ufm.su