Причем в плохом смысле этого слова.
Простенькая и неправильная программа: 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)Я бы немедленно запостил этот код на Stack Overflow - наверняка там найдется кто-то если не из разработчиков, то по крайней мере из сильных почитателей языка, кто сможет объяснить такое необычное поведение.
(no subject)
Date: 2014-05-07 08:40 (UTC)Надо будет gcc-шный вариант go пошшупать - может там оно более правильное.
(no subject)
Date: 2014-05-07 02:26 (UTC)PS ну и sync/atomic же чтобы правильно считало
(no subject)
Date: 2014-05-07 08:02 (UTC)Как сделать подсчёт правильным я знаю 4 способа - я сразу написал, что разговор не про это.
(no subject)
Date: 2014-05-07 06:12 (UTC)(no subject)
Date: 2014-05-07 08:04 (UTC)(no subject)
Date: 2014-05-07 10:24 (UTC)(no subject)
Date: 2014-05-07 14:40 (UTC)