Nushell
문서
쿡북
블로그
  • English
  • 中文
  • Deutsch
  • Français
  • Español
  • 日本語
  • Português do Brasil
  • Русский язык
  • 한국어
GitHub
문서
쿡북
블로그
  • English
  • 中文
  • Deutsch
  • Français
  • Español
  • 日本語
  • Português do Brasil
  • Русский язык
  • 한국어
GitHub
  • 소개
  • 설치하기
    • 기본 셸
  • 시작하기
    • 빠른 둘러보기
    • 시스템 이동
    • 누셸 방식으로 생각하기
    • 누셸 치트 시트
  • Nu 기본
    • 데이터 유형
    • 데이터 로드
    • 파이프라인
    • 문자열 작업
    • 목록 작업
    • 레코드 작업
    • 테이블 작업
    • 구조화된 데이터 탐색 및 액세스
    • 특수 변수
  • Nu에서 프로그래밍하기
    • 사용자 지정 명령
    • 별칭
    • 연산자
    • 변수
    • 제어 흐름
    • 스크립트
    • 모듈
      • 모듈 사용하기
      • 모듈 만들기
    • 오버레이
    • 정렬
    • 누셸 코드 테스트
    • 모범 사례
  • 셸로서의 Nu
    • 구성
    • 환경
    • 표준 출력, 표준 오류 및 종료 코드
    • 시스템(외부) 명령 실행
    • 타사 프롬프트 구성 방법
    • 디렉터리 스택
    • Reedline, Nu의 줄 편집기
    • 사용자 지정 완성
    • 외부 명령
    • Nu의 색상 지정 및 테마 설정
    • 후크
    • 백그라운드 작업
  • Nu로 전환하기
    • Bash에서 오신 분들을 위해
    • CMD.EXE에서 오신 분들을 위해
    • 다른 셸 및 도메인 특정 언어의 Nu 맵
    • 명령형 언어의 Nu 맵
    • 함수형 언어의 Nu 맵
    • 누셸 연산자 맵
  • 디자인 노트
    • 누셸 코드가 실행되는 방법
  • (약간)고급 사용법
    • 표준 라이브러리 (미리보기)
    • 데이터프레임
    • 메타데이터
    • 나만의 오류 만들기
    • 병렬 처리
    • 플러그인
    • explore

병렬 처리

누셸은 이제 코드를 병렬로 실행하는 초기 지원을 제공합니다. 이를 통해 컴퓨터의 더 많은 하드웨어 리소스를 사용하여 스트림의 요소를 처리할 수 있습니다.

par-라는 특징적인 이름으로 이러한 명령을 볼 수 있습니다. 각 명령은 비병렬 버전에 해당하므로 먼저 직렬 스타일로 코드를 쉽게 작성한 다음 몇 가지 추가 문자로 직렬 스크립트를 병렬 스크립트로 쉽게 변환할 수 있습니다.

par-each

가장 일반적인 병렬 명령은 each 명령의 동반자인 par-each입니다.

each와 마찬가지로 par-each는 파이프라인에 들어오는 각 요소에 대해 작동하여 각 요소에 대해 블록을 실행합니다. each와 달리 par-each는 이러한 작업을 병렬로 수행합니다.

현재 디렉터리의 각 하위 디렉터리에 있는 파일 수를 계산하고 싶다고 가정해 보겠습니다. each를 사용하여 다음과 같이 작성할 수 있습니다.

ls | where type == dir | each { |row|
    { name: $row.name, len: (ls $row.name | length) }
}

각 항목에 대한 레코드를 만들고 디렉터리 이름과 해당 하위 디렉터리의 항목 수로 채웁니다.

컴퓨터에 따라 시간이 다를 수 있습니다. 이 컴퓨터에서는 현재 디렉터리에 대해 21밀리초가 걸렸습니다.

이제 이 작업은 병렬로 실행할 수 있으므로 each를 par-each로 변경하여 위를 병렬로 변환해 보겠습니다.

ls | where type == dir | par-each { |row|
    { name: $row.name, len: (ls $row.name | length) }
}

이 컴퓨터에서는 이제 6ms로 실행됩니다. 상당한 차이입니다!

참고: 환경 변수는 범위가 지정되므로 par-each를 사용하여 여러 디렉터리에서 병렬로 작업할 수 있습니다(cd 명령 참조).

ls | where type == dir | par-each { |row|
    { name: $row.name, len: (cd $row.name; ls | length) }
}

결과를 보면 실행할 때마다 다른 순서로 돌아오는 것을 알 수 있습니다(시스템의 하드웨어 스레드 수에 따라 다름). 작업이 완료되고 올바른 결과를 얻으면 특정 순서로 결과를 원하면 추가 단계를 추가해야 할 수 있습니다. 예를 들어, 위의 경우 "name" 필드를 기준으로 결과를 정렬할 수 있습니다. 이렇게 하면 스크립트의 each 및 par-each 버전 모두 동일한 결과를 제공할 수 있습니다.

GitHub에서 수정하기
Contributors: Taeyoon Kim, ImgBotApp, google-labs-jules[bot], deepthought
Prev
나만의 오류 만들기
Next
플러그인