맨위로가기

파이버 (컴퓨터 과학)

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

파이버는 코루틴과 유사한 개념으로, 시스템 수준에서 구현되는 스레드의 모음이다. 파이버는 협력적 컨텍스트 전환을 사용하여 스레드 안전성 문제를 줄일 수 있지만, 다중 프로세서 시스템을 활용하는 데 제약이 있다. 파이버는 운영 체제 지원 없이 구현될 수 있으며, C++, PHP, Rust, Crystal, JavaScript 등 다양한 프로그래밍 언어에서 지원된다.

더 읽어볼만한 페이지

  • 스레드 - 멀티스레딩
    멀티스레딩은 프로세스 내에서 여러 스레드를 동시 실행하여 처리 능력을 향상시키는 기술로, 응답성 향상과 자원 공유 등의 장점이 있지만, 자원 간섭과 소프트웨어 복잡성 증가 등의 단점도 존재하며, 다양한 모델과 구현 방식, 스레드 스케줄러, 가상 머신 활성화 가능성 등을 고려해야 한다.
  • 스레드 - 동시 멀티스레딩
    동시 멀티스레딩(SMT)은 슈퍼스칼라 구조 기반으로 한 클럭 사이클 내에 여러 스레드의 명령어를 동시에 실행하여 CPU 자원 활용률을 높이는 기술이지만, 자원 경합, 성능 저하, 보안 취약점 등의 단점도 있으며, 인텔 하이퍼 스레딩이 대표적이다.
  • 제어 흐름 - 프로그램 카운터
    프로그램 카운터는 CPU 내에서 다음에 실행될 명령어의 주소를 저장하는 레지스터로, 명령어 사이클의 fetch 단계에서 사용되어 명령어를 가져오고 실행 후 갱신되며, CPU 성능 향상 기술과 현대 프로그래밍 모델에 영향을 미친다.
  • 제어 흐름 - 예외 처리
    예외 처리는 프로그램 실행 중 예외 발생 시 정상적인 실행 흐름을 유지하거나 안전하게 종료하기 위한 메커니즘으로, 많은 프로그래밍 언어에서 제공하며 예외 안전성을 목표로 한다.
파이버 (컴퓨터 과학)
개요
종류컴퓨터 과학의 프로세스
특징사용자 수준의 스레드
비고코루틴과 유사
상세 정보
정의협력적 멀티태스킹의 한 형태로, 실행을 양보할 시점을 결정
운영체제의 스케줄링 메커니즘을 사용하지 않음
구현프로그래밍 언어 및 라이브러리 수준에서 구현
운영체제 커널의 지원 없이 동작
장점스레드 컨텍스트 스위칭에 비해 오버헤드가 적음
동시성 프로그래밍을 더 쉽게 구현 가능
단점블로킹 I/O 작업 시 전체 프로세스가 멈출 수 있음
병렬성을 완벽하게 활용하기 어려움
관련 개념
코루틴파이버와 유사한 개념이지만, 더 일반적인 제어 흐름을 지원
스레드운영체제 커널에 의해 관리되는 실행 단위
그린 스레드파이버와 유사하게 사용자 수준에서 관리되는 스레드

2. 역사와 개념

파이버는 코루틴과 본질적으로 유사하다. 파이버는 시스템 수준에서 구현되며 동시에 실행되지 않는 스레드의 모음이다. 어느 개념이 먼저 나왔는지에 대해서는 이견이 있다.[10][11]

2. 1. 코루틴과의 관계

파이버는 본질적으로 코루틴과 유사하다. 차이점은 코루틴의 경우 프로그래밍 언어 수준에서 구현되는 제어 흐름인 반면, 파이버는 시스템 수준에서 구현되며 동시에 실행되지 않는 스레드의 모음이라는 것이다.[10] 두 개념 중 어느 것이 먼저 나왔는지에 대한 이견이 있다. 코루틴을 시스템 수준으로 구현한 것인지, 코루틴을 구현하기 위한 기반으로 만들어진 것인지에 대한 분쟁이다.[11]

파이버와 커널 스레드의 주요 차이점은 파이버가 선점형 시분할 방식 대신 협력적 컨텍스트 전환을 사용한다는 것이다. 실제로 파이버는 동시성 분류를 확장한다.

  • 단일 컴퓨터에서 여러 프로세스가 실행될 수 있다.
  • 단일 프로세스 내에서 여러 스레드가 실행될 수 있다.
  • 단일 스레드 내에서 여러 파이버가 실행될 수 있다.[1]


파이버(스택풀 코루틴 또는 사용자 모드 협력적으로 스케줄링된 스레드라고도 함)와 스택리스 코루틴(컴파일러가 합성한 상태 머신)은 성능과 기능 면에서 큰 차이가 있는 두 가지 뚜렷한 프로그래밍 기능을 나타낸다.[2] 파이버는 코루틴과 본질적으로 같은 개념이다. 차이점이 있다면 코루틴은 언어 수준의 구조로, 제어 흐름 형태 중 하나인 반면, 파이버는 시스템 수준의 구조이며 병렬로 동작하지 않는 스레드로 간주된다는 점이다. 어느 쪽에 더 가까운지에 대해서는 이견이 있을 수 있지만, 파이버는 코루틴의 구현이거나,[6] 코루틴을 구현하기 위한 기반으로 볼 수 있다.[7]

3. 장점과 단점

파이버는 협력적으로 멀티태스킹을 수행하여 스레드 안전성 문제를 줄이고, 스핀락원자성 작업 같은 동기화 구조를 불필요하게 만든다는 장점이 있다. 하지만, 선점형 스레드 없이는 다중 프로세서 시스템을 활용할 수 없다는 단점이 있다.

일부 서버 프로그램에서 파이버는 자체적으로 소프트 블록(soft block)을 하여 단일 스레드로 작동하는 상위 프로그램이 계속 작동할 수 있도록 돕는다. 이 경우 파이버는 주로 CPU 처리가 필요 없는 I/O 액세스에 사용된다. 그래서 메인 프로그램은 기존에 수행 중이던 작업을 계속할 수 있으며, 파이버는 단일 스레드 메인 프로그램에 제어를 양보하고 I/O 작업이 완료되면 중단된 지점에서 다시 시작한다.[1]

3. 1. 장점

파이버는 협력적으로 멀티태스킹을 수행하므로 스레드 안전성 문제는 선점형 스레드보다 덜하다. 파이버 단위가 자체적으로 양보를 하는 특성 덕분에 스핀락원자성 작업을 포함한 동기화 구성은 불필요하며 암시적으로 동기화된다.[1] 그러나 비동기 I/O를 수행하기 위해 암시적으로 파이버를 생성하는 라이브러리가 많으므로 주의해야 한다.[1]

3. 2. 단점

파이버는 선점형 스레드를 사용하지 않고는 다중 프로세서 시스템을 활용할 수 없다. 그러나 CPU 코어보다 더 많은 선점 스레드가 없는 M:N 스레딩 모델은 순수 파이버 또는 순수 선점 스레딩보다 더 효율적일 수 있다.[1]

많은 라이브러리가 비동기 I/O를 수행하기 위해 암시적으로 파이버를 생성하므로, 주의 깊게 사용하고 문서를 숙독해야 한다.[1]

4. M:N 스레딩 모델

M:N 스레딩 모델은 CPU 코어 수보다 많은 선점 스레드가 없는 경우, 순수 파이버 또는 순수 선점 스레딩보다 더 효율적일 수 있다. 파이버는 협력적으로 멀티태스킹을 하므로 스레드 안전성 문제는 선점형 스레드보다 덜하며, 스핀락 및 원자성 작업을 포함한 동기화는 불필요하다. 그러나 비동기 I/O를 수행하기 위해 암시적으로 파이버를 생성하는 라이브러리가 많으므로 주의해야 한다. 파이버는 선점형 스레드를 사용하지 않고는 다중 프로세서 시스템을 사용할 수 없다는 단점이 있다.

4. 1. M:N 스레딩 모델에서의 파이버 활용

일부 서버 프로그램에서 파이버는 자체적으로 소프트 블록(soft block)을 사용하여 단일 스레드로 작동하는 상위 프로그램이 계속 작동할 수 있도록 한다. 이런 설계에서 파이버는 CPU 처리가 필요없는 I/O 액세스에 주로 사용된다. 그래서 메인 프로그램이 기존에 수행중인 작업을 계속할 수 있다. 파이버는 단일 스레드 메인 프로그램에 대한 제어를 양보하며 I/O 작업이 완료되면 파이버가 중단된 지점에서 계속된다.[1]

5. 운영 체제 지원

파이버는 스레드에 비해 운영 체제 지원이 상대적으로 덜 필요하다.

현대 유닉스 시스템에서는 GNU Portable Threads처럼 `ucontext.h` 라이브러리에서 제공되는 getcontext, setcontext, swapcontext 함수를 이용해 구현하거나 [http://www.boost.org/doc/libs/release/libs/fiber/doc/html/index.html boost.fiber]처럼 어셈블러를 사용하여 구현할 수 있다.

마이크로소프트 윈도우에서 파이버는 `ConvertThreadToFiber` 및 `CreateFiber` 호출을 통해 스레드에서 사용 가능한 파이버를 생성할 수 있고, 스레드 로컬 저장소와 유사한 파이버 로컬 스토리지를 통해 변수의 고유한 복사본을 생성할 수 있다.[12]

심비안 OS의 Active Scheduler는 파이버와 유사한 구조를 갖는다. 심비안 OS의 [https://en.m.wikipedia.org/wiki/Active_object_(Symbian_OS) 활성 객체(Active obejct)]는 비동기 호출이 완료되면 Active Scheduler를 통해 실행되는 하나의 파이버를 갖는다. 여러 Active Object는 우선순위에 따라 실행되기까지 대기 상태일 수 있으며, 각각의 Active Obejct는 실행 시간에 제한을 갖는다.

6. 프로그래밍 언어 지원

파이버는 운영 체제의 지원 없이 구현될 수 있지만, 일부 운영 체제나 라이브러리에서 명시적인 지원을 제공하기도 한다.


  • Win32는 파이버 API를 제공한다.[4] (Windows NT 3.51 SP3 이상)
  • 넷스케이프 휴대용 런타임(사용자 공간 파이버 구현 포함)
  • [https://github.com/Adaptv/ribs2 ribs2]

6. 1. C++

C++ Boost 라이브러리는 Boost 1.62 버전부터 [https://www.boost.org/doc/libs/1_78_0/libs/fiber/doc/html/index.html fiber 클래스]를 가지고 있다.

6. 2. Ruby

루비는 1.9 버전 이전까지 그린 스레드를 지원했다.[4]

6. 3. PHP

PHP는 8.1 버전부터 파이버를 지원한다.[5]

6. 4. Rust

Rust는 내부적으로 Futures를 사용하는 [https://crates.io/crates/fibers fibers]를 지원한다.[5]

6. 5. Crystal

크리스탈은 언어와 표준 라이브러리의 일부로 파이버를 제공한다.

6. 6. 자바스크립트

자바스크립트는 원래 싱글 스레드로 동작하도록 설계되었지만, HTML5부터 주소 공간을 공유하지 않는 Web Workers가 추가되었다. 이들과는 별도로, Node.js에서는 주소 공간을 공유하지만, 협력적 멀티태스킹 설계를 가진 파이버가 fibers 패키지[9]를 통해 제공된다.

참조

[1] 간행물 N4024 Distinguishing coroutines and fibers http://www.open-std.[...] 2014-05-22
[2] 간행물 P1364R0 Fibers under the magnifying glass http://www.open-std.[...] 2018-11-20
[3] 웹사이트 Fibers http://msdn2.microso[...]
[4] 웹사이트 CreateFiber http://msdn.microsof[...]
[5] 뉴스 PHP 8.1.0 Release Announcement https://www.php.net/[...]
[6] 웹사이트 A Fiber Class http://www.flounder.[...]
[7] 간행물 Implementing Coroutines for .NET by Wrapping the Unmanaged Fiber API http://msdn.microsof[...] Microsoft Developer Network
[8] 웹사이트 Fibers - Win32 apps | Microsoft Docs https://docs.microso[...]
[9] 웹사이트 fibers https://npmjs.org/pa[...]
[10] 웹사이트 A Fiber Class http://www.flounder.[...]
[11] 웹인용 Implementing Coroutines for .NET by Wrapping the Unmanaged Fiber API https://web.archive.[...] Microsoft 2003-09
[12] 웹사이트 Fibers http://msdn2.microso[...]



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com