2016-09-01 2 views
5

나는 최근에 this article이 JavaScript의 기능을 조작하는 능력을 사용하여 전세계의 모든 컴퓨터가 인터넷의 모든 정보를 처리하는 데 작은 부분을 수행 할 수있는 방법을 설명하려고합니다. 내가 알고있는 방법은 이것이다 :선언되지 않은 함수를 객체로 사용하는 Javascript의 기능이 컴퓨터간에 작업을 나누는 데 어떻게 도움이됩니까?

function map(fn, a) 
{ 
    for (i = 0; i < a.length; i++) 
    { 
     a[i] = fn(a[i]); 
    } 
} 

map가 빠르게 배열에

map(function(x){return x*2;}, a); 

를 모든 요소에 함수를 호출 할 수 있으며 JS 당신이 그것을 선언하지 않고 함수를 호출 할 수있는 기능. 전제는 인터넷의 모든 데이터가 배열로 저장되어 있다면 (어떤 식 으로든 map을 사용하면) 배열의 모든 항목에 대해 몇 가지 특정 변경 작업을 여러 CPU 또는 모든 컴퓨터간에 분할 할 수 있다는 것입니다.

이것은 이해할 수없는 부분입니다. 왜 이것을 수행하려면 map 또는 JS의 배열 조작이 필요합니까? 모든 컴퓨터에 배열의 한 섹션을 보내고 어레이의 모든 요소에서 실행되는 함수를 보내고 배열 없이 실행해야하거나 이상한 함수 사용을 필요로하지 않고 변환 할 수 있습니까?

물론 개체로 함수를 사용하는 것이 편리하지만,이 작업이 CPU간에 작업을 분할하는 작업에 필수적인 이유는 무엇입니까?

답변

4

아니요, 잘못된 결론으로 ​​넘어 가고 있습니다. Joel은 ""인터넷에있는 모든 정보를 처리하는 데있어 세계의 모든 컴퓨터가 작은 부분을하도록 허용하기 위해 JavaScript를 사용하는 것을지지하지 않습니다. "". 그는 mapreduce 기능 (btw는 배열에만 사용되는 것보다 훨씬 더 일반적으로 정의 될 수 있음)을 보여주기 위해 JavaScript를 선택 언어로 사용하고 있습니다. 일류의 기능을 프로그래밍 언어

당신이 추상화에 대한 더 많은 기회를 찾아 보자 그는 그 어떤 도움이 될 프로그래밍 언어는 추상화 (first-class functions)의 일정 수준이 필요하다는 것을 숙고 완전히 자바 스크립트의 영역을 떠나지 않습니다 이는 귀하의 코드가 작고, 견고하며, 재사용 가능하고, 확장 성이 높다는 것을 의미합니다. 그들은 단지 다른 기능을 전달하여 데이터 집합의 종류를 표현 할 수있는 절대적으로 일반적이기 때문에map and reduce는 (특정 언어 구현없이) 개념으로 매우 유용하다는

이다. 이들이 pure 인 한, 그들은 이며, 병렬 처리가 가능하다.이며 알고리즘이나 결과를 변경하지 않고 멀티 코어 컴퓨터 또는 심지어 인터넷 규모의 클러스터에서도 구현할 수있다.

+0

좀보고 할 수 있습니다 더 일류 함수는 병렬 컴퓨팅을보다 쉽게 ​​수행합니다. 물론, map과 reduce는 코드를 압축하는 방법으로 편리 할 것 같지만, 각 CPU에 필요한 액션으로'for' 루프를 그냥 똑바로 전달하는 것과 어떻게 다른가요? 두 경우 모두 결국 액션 자체에 대한 코드를 보내야합니다. 그러면 어떻게 도움이 될까요? 아니면 단순히 코드를 깨끗하게하는 것의 범위입니까? 아마도 나는지도 제작이 정확히 무엇인지 잘 이해하지 못하고 있다고 생각합니다. – DaemonOfTheWest

+0

첫 번째 클래스 함수는'map' /'reduce'와 같은 프레임 워크/기능을 빌드하는 데 필요한 추상화를 제공합니다. 'map'의 구현을 덤프'for' 루프에서 병렬 처리되거나 분산되는 것으로 변경할 수 있지만'map'을 사용하는 코드는 전혀 변경하지 않아도됩니다. 네가 코드를 깨끗하게 유지하는 문제 (알고리즘 적 기능 대 평가 모델)의 분리이다. – Bergi

+0

해명 해 주셔서 감사합니다. 그러나 이것이 Google의 mapreduce 사용과 어떤 관련이 있습니까? 아마도 저는지도 제작이 무엇인지 진정으로 이해하지 못하고 있지만 그러한 기능을 만들면 얻을 수있는 이익이 너무 많아서 검색을 간소화하는 데 사용 된 방법이 정확히 표시되지 않는 것 같습니다. – DaemonOfTheWest

1

MapReduce는 많은 컴퓨터를 활용하여 초창기에 Google이 검색을 수행하는 방법이었습니다.

분명히 전달되지 않는다면 루프를 사용하여 반복 작업을 수행하지 않고 map을 사용하면 값을 가져 와서 새로운 값을 생성하는 함수를 줄 수 있습니다. 함수 자체가 병렬로 작업을 수행하는 방법을 알아낼 수 있습니다.

for 루프가 작동하지 않을 수 있습니다. 자신의 병렬 구현을 손으로해야합니다. 당신은 두 가지 방법으로 평행을 다룰 수 있습니다.그러나 그것은이었다가 발생하기 쉬운 쉽게/간단/덜 오류

가 JS에서 함수형 프로그래밍에 유용한 도입 무엇인지 질문, 당신은 내가 아직도 확실히 이해가 안 돼요 https://drboolean.gitbooks.io/mostly-adequate-guide/content/