섬유(컴퓨터 과학)
Fiber (computer science)컴퓨터 과학에서 섬유는 특히 가벼운 실행 스레드입니다.
스레드와 마찬가지로 파이버는 주소 공간을 공유합니다.단, 파이버는 공동 멀티태스킹을 사용하는 반면 스레드는 프리엠프티브 멀티태스킹을 사용합니다.스레드는 종종 커널의 스레드 스케줄러에 의존하여 비지 스레드를 프리엠프트하고 다른 스레드를 재개합니다.파이버는 실행 중에 다른 파이버를 실행하기 위해 스스로 포기합니다.
나사산, 섬유 및 코루틴
파이버와 커널 스레드의 주요 차이점은 파이버가 프리엠프티브타임슬라이싱 대신 공동 컨텍스트스위칭을 사용한다는 점입니다.실제로 파이버는 동시성 분류법을 확장합니다.
- 단일 시스템에서 여러 프로세스를 실행할 수 있습니다.
- 단일 프로세스 내에서 여러 스레드를 실행할 수 있습니다.
- 1개의 스레드 내에서 여러 개의 파이버를 실행할 수 있습니다[1].
파이버(스택풀 코루틴 또는 사용자 모드 공동 스케줄링 스레드라고도 함)와 스택리스 코루틴(컴파일러 합성 스테이트 머신)은 퍼포먼스와 기능의 차이가 [2]큰2개의 다른 프로그래밍 기능을 나타냅니다.
장점과 단점
파이버 멀티태스킹이 연계되어 있기 때문에 스레드의 안전성은 사전에 스케줄된 스레드보다 문제가 되지 않으며 파이버 코드 작성 시 spinlock이나 atomic operation을 포함한 동기 구조는 암묵적으로 동기화되기 때문에 불필요합니다.단, 많은 라이브러리는 비블로킹 I/O를 실행하는 방법으로 광섬유를 암묵적으로 제공합니다.따라서 주의사항 및 문서 판독이 권장됩니다.단점은 파이버가 프리엠프티브스레드를 사용하지 않으면 멀티프로세서 머신을 이용할 수 없다는 점입니다.다만, CPU 코어보다 프리엠프티브스레드가 적은 M:N 스레드 모델은 순수 파이버 또는 순수 프리엠프티브스레드보다 효율적입니다.
일부 서버 프로그램에서는 광섬유를 사용하여 싱글 스레드 부모 프로그램이 계속 작동할 수 있도록 자체 소프트웨어 블록이 사용됩니다.이 설계에서는 파이버는 주로 CPU 처리가 필요 없는 I/O액세스에 사용됩니다.이것에 의해, 메인 프로그램이 계속 할 수 있게 됩니다.파이버는 싱글 스레드 메인 프로그램에 대한 제어 권한을 부여하며 I/O 작업이 완료되면 파이버는 중단되었던 부분부터 계속됩니다.
운영 체제 지원
파이버에는 스레드보다 운영체제로부터의 지원이 적게 필요합니다.최신 Unix 시스템에서는 라이브러리 함수 getcontext, setcontext 및 swapcontext를 사용하여 구현할 수 있습니다.ucontext.h
GNU Portable Threads 또는 assembler에서 boost.fiber로 지정됩니다.
Microsoft Windows 에서는, 파이버는,ConvertThreadToFiber
그리고.CreateFiber
콜: 현재 중단되어 있는 파이버는 임의의 스레드로 재개할 수 있습니다.스레드 로컬 스토리지와 유사한 파이버 로컬 스토리지를 사용하여 변수의 [3]고유한 복사본을 만들 수 있습니다.
Symbian OS는 Active Scheduler에서 파이버와 유사한 개념을 사용했습니다.액티브 오브젝트에는 몇 개의 미결 비동기 콜 중 하나가 완료되면 Active Scheduler에 의해 실행되는 파이버가1개 포함되어 있습니다몇 개의 액티브오브젝트가 (priority에 근거해) 실행을 대기하고 있을 가능성이 있어 각각 독자적인 실행시간을 제한해야 합니다.
파이버 구현 예시
파이버는 운영체제를 지원하지 않고 구현할 수 있지만 일부 운영체제나 라이브러리는 파이버를 명시적으로 지원합니다.
- Win32는 파이버[4] API를 제공합니다(Windows NT 3.51 SP3 이후).
- C++ Boost 라이브러리에는 Boost 버전 1.62 이후 파이버클래스가 있어요
- Ruby에는 녹색 스레드(버전 1.9 이전)가 있습니다.
- Netscape Portable Runtime(사용자 공간 파이버 구현 포함)
- 리브2
- 버전 8.1 이후[5] PHP
「 」를 참조해 주세요.
레퍼런스
외부 링크
- GNU 휴대용 스레드
- "Portable Coroutine Library". Freecode.
- 파이버 풀 Microsoft Windows용 파이버를 기반으로 한 멀티코어 대응 C++ 프레임워크.
- 상태 스레드
- 프로토스레드
- 리브2
- boost.displicate를 실행합니다.