"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 병렬 JavaScript 머신

병렬 JavaScript 머신

2024-11-06에 게시됨
검색:795

저자: Vladas Saulis, PE Prodata, 리투아니아 클라이페다

2024년 5월 18일

추상적인
본 논문에서는 멀티 코어 CPU 시스템을 간단하고 자동 균형 방식으로 활용할 수 있는 새로운 프로그래밍 모델을 제시합니다. 이 모델은 또한 날씨 예측, 핵물리학, 검색 엔진 등과 같은 대규모 병렬 계산 영역에서 병렬 작업 및 시스템을 개발하기 위한 더 쉬운 프로그래밍 패러다임을 제안합니다.

최근 우리는 새로운 하드웨어 아키텍처의 발전과 더욱 향상된 성능으로 인해 컴퓨팅 철학의 새로운 변화에 직면하고 있습니다. 멀티 코어 아키텍처는 가까운 미래에 널리 사용되는 기술이 될 것입니다.

이를 활용하려면 어떻게 해야 합니까? 이 문서는 우리가 가질 수 있는 가능한 솔루션 중 하나에 관한 것입니다.

제안된 컴퓨팅 모델("객체 흐름 모델"이라고 함)은 또한 잘 알려진 Berkeley 출판 논문 형식에서 제기된 질문에 대한 몇 가지 답변을 제공합니다[1]. 다음은 이 모델을 사용하여 얻을 수 있는 간단한 이점 목록입니다.

· 간단한 프로그래밍 프로세스 및 추가 유지 관리

· 객체 처리 장치(OPU)를 즉시 추가하거나 제거할 수 있는 경우 자연스러운 OPU(CPU) 통합 및 마이그레이션

· 자동 로드 밸런싱

· 작업 파트간 동기화 불필요

· 시스템 수준에서 상호 잠금이 거의 또는 전혀 없음

이러한 모든 특성은 이 문서의 아래에 설명된 PJM(Parallel JavaScript Machine)에서 구현됩니다. PJM은 여러 JavaScript 작업, 여러 사용자 및 여러 프런트 엔드 콘솔을 제어하는 ​​미니 운영 체제로 인식될 수 있습니다.

소개
PJM(OS)의 주요 목표는 //#pragma .

형식으로 특별히 제작된 주석으로 표시되는 특수 명령(힌트)을 도입하여 병렬 프로그래밍을 단순화하는 것입니다.

Parallel JavaScript Machine은 NodeJS를 사용하며 프런트엔드용 웹 서버와 실제로 코드 병렬 실행을 수행하는 OPU용 서버로 구현됩니다. OPU는 NodeJS에서도 구현되는 작은 JavaScript 네트워크 클라이언트입니다. 필요한 만큼 많이 있을 수 있으며 로컬 또는 원격으로 주 병렬 시스템 서버에 연결될 수 있습니다. 병렬 처리의 전반적인 성능은 연결된 OPU 수에 따라 크게 달라집니다.

함께 작동하는 모든 시스템 부분은 실행 중인 JavaScript 작업을 시작 및 구문 분석하고 해당 청크를 시스템 실행 대기열에 넣고 선택한 청크 간에 일종의 협력적 멀티태스킹을 제공하는 미니 OS로 이해될 수 있습니다. 계산 결과는 메인 서버를 통해 OPU의 console.log 출력을 파이프라인하여 웹 클라이언트 콘솔에 인쇄됩니다. 모든 OPU는 자체 CPU(로컬 또는 원격)에 할당되며 간단한 라운드 로빈 스케줄러를 통해 작동합니다(나중에 설명됨). 이는 PM2 프로세스 관리자 노드 모듈을 사용하여 달성됩니다.

“오래된 바이너리 및 C 프로그램과의 호환성은 업계에 가치가 있고 일부 연구자들은 멀티코어 제품 계획의 성공을 돕기 위해 노력하고 있지만 우리는 더 과감한 생각을 해왔습니다. 우리의 목표는 수천 개의 프로세서를 실현하는 것입니다…”[1] 단일 물리적 컴퓨터에서는 필요하지 않지만 네트워크 전체에서 중앙 서버 장치에 의해 모두 조정됩니다. 시스템 관점에서 모든 CPU/OPU는 로컬 CPU와 원격 CPU를 구분하지 않는 내부 네트워크 소켓 프로토콜을 통해 작동합니다. 서버(PJM)와 클라이언트(OPU) — 모두 JavaScript로 작성되었으므로 [아직] C 바이너리와 호환되지 않습니다.

PJM에서 실행되는 모든 병렬 프로그램은 ES6 JavaScript 확장을 사용해서는 안 됩니다(ES5를 사용해야 함). 클래스, 화살표 함수, let 및 const, 특히 async/await와 같은 확장은 병렬화가 거의 불가능하므로 더욱 철저한 JavaScript 내부 연구가 필요하다는 점을 여기서 언급하는 것이 중요합니다. 이것이 PJM이 NodeJS V8.2.1에서 실행되는 이유입니다. 더 나은 성능과 개념의 명확성을 위해 모든 노드 모듈이 이 버전으로 고정되어 있습니다.

PJM은 http://parallel-js.net:8888 에 있는 웹 콘솔을 사용하여 제어되고 작업이 실행됩니다. 일반적으로 다음과 같습니다.

Parallel JavaScript Machine

웹 콘솔은 ExtJS 프레임워크를 사용하여 작성되었으며 express.js HTTP NodeJS 모듈을 사용하여 PJM 서버에 연결됩니다. 웹 콘솔의 또 다른 부분(콘솔 및 메시지라고 함)은 WebSocket을 사용하여 연결됩니다. 이곳은 모든 프로그램의 출력과 시스템 메시지가 실시간으로 들어오는 곳입니다. 웹 콘솔에서는 실제 계산이 수행되지 않는다는 점을 아는 것이 중요합니다. 모든 계산은 PJM 서버와 OPU에서 수행됩니다.

이 프로젝트에 관심이 있으시면 여기에서 전체 기사를 찾아보세요.

이 프로젝트의 소스 코드는 여기에 있습니다.

릴리스 선언문 이 글은 https://dev.to/vsaulis/parallel-javascript-machine-551k?1에서 복제됩니다. 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3