Давайте возьмем пример от бумага Google . Цель MapReduce состоит в том, чтобы быть в состоянии использовать эффективно загрузку блоков обработки, работающих в параллелях на некоторые алгоритмы. exemple следующий: Вы хотите извлечь все слова и их количество в ряде документов.
Типичная реализация:
for each document
for each word in the document
get the counter associated to the word for the document
increment that counter
end for
end for
реализация MapReduce:
Map phase (input: document key, document)
for each word in the document
emit an event with the word as the key and the value "1"
end for
Reduce phase (input: key (a word), an iterator going through the emitted values)
for each value in the iterator
sum up the value in a counter
end for
, Вокруг которого, у Вас будет основная программа, которая разделит набор документов в "разделениях", которые будут обработаны параллельно для фазы Карты. Испускаемые значения записаны рабочим в буфере, характерном для рабочего. Основная программа тогда делегирует других рабочих для выполнения Уменьшать фазы, как только это уведомляется, что буфер готов быть обработанным.
Каждый рабочий произвел (быть Картой, или Уменьшать рабочий) на самом деле файл, хранивший в распределенной файловой системе (GFS для Google) или в распределенной базе данных для CouchDB.
Используйте Math. abs .
Ниже приведен комментарий об использовании отрицания (спасибо Келли за то, что заставил меня задуматься), и он немного быстрее по сравнению с Math.abs
при большом количестве преобразований если вы сделаете локальную ссылку на функцию Math.abs
(без локальной ссылки Math. abs
намного медленнее).
См. ответ на этот вопрос для получения более подробной информации. Для малых чисел разница незначительна, и я думаю, что Math.abs - гораздо более чистый способ «самодокументирования» кода.
Между этими двумя вариантами (спасибо за пример @Kooilnc):
Number.prototype.abs = function(){
return Math.abs(this);
};
и
var negative = -23,
positive = -negative>0 ? -negative : negative;
идут со вторым (отрицание). Это не требует вызова функции, и ЦП может сделать это за очень мало инструкций. Быстро, легко и эффективно.
if (myvar < 0) {
myvar = -myvar;
}
или
myvar = Math.abs(myvar);
или, если вы хотите избежать вызова функции (и ветвления), вы можете использовать этот код:
x = (x ^ (x >> 31)) - (x >> 31);
это немного "хакерский" и выглядит неплохо в какой-то странной манере :) но я бы все равно придерживался Math.abs
(просто хотел показать еще один способ сделать это)
кстати, это работает только если базовый механизм javascript хранит целые числа как 32-битные, что имеет место в firefox 3.5 на моем компьютере (32-битный, поэтому он может не работать на 64-битном компьютере, не тестировал ...)
Это не реализация jQuery, но используется библиотека Math из Javascript
x = Math.abs (x);