bfiber_0200
Boost.Fiber Fiber management 파이버 관리
Fiber management 파이버 관리
Synopsis
Tutorial
각 파이버는 스케줄러에 의해 협력적으로(cooperatively) 시작되고 관리되는 마이크로 스레드를 나타냅니다. 파이버 유형의 개체는 이동 전용(move-only)입니다.
시작 - Launching
매개변수 없이 호출할 수 있는 호출 가능 유형의 객체를 전달하여 새 파이버가 시작됩니다.
객체를 복사하거나 이동하면 안 되는 경우 'std::ref'를 사용하여 함수 객체에 대한 참조를 전달할 수 있습니다.
이 경우 사용자는 참조된 개체가 새로 생성된 파이버보다 오래 지속되는지 확인해야 합니다.
생성된(spawned) 파이버는 즉시 실행을 시작하지 않습니다.
실행 준비가 완료된(ready-to-run) 파이버 목록에 포함되어 있으며 스케줄러가 해당 파이버에 접근하면 실행됩니다.
예외 - Exceptions
파이버 생성자에 전달된 함수 또는 호출 가능 객체에서 탈출하는 예외는 std::terminate()를 호출합니다. 어떤 예외가 발생했는지 알고 싶다면 future<> 또는 packaged_task<>를 사용하세요.
분리 - Detaching
fiber::detach() 멤버 함수를 명시적으로 호출하여 파이버를 분리할 수 있습니다.
fiber::detach()가 fiber 개체에 대해 호출된 후 해당 개체는 fiber가 아님을 나타냅니다(not-a-fiber).
그러면 파이버 객체가 안전하게 파괴될 수 있습니다.
Boost.Fiber는 실행 중인 파이버가 완료될 때까지 기다리는 다양한 방법을 제공합니다.
뮤텍스, Condition_variable 또는 라이브러리에서 제공하는 기타 동기화 개체를 사용하여 분리된 파이버와도 조정(coordinate)할 수 있습니다.
스레드의 주(main) 파이버가 종료될 때 분리된 파이버가 여전히 실행 중이면 스레드는 종료되지 않습니다.
(완료)기다리기 - Joining
Fiber가 완료될 때까지 기다리려면 Fiber 객체의 fiber::join() 멤버 함수를 사용할 수 있습니다.
fiber::join()은 fiber 객체가 완료될 때까지 차단됩니다.
파이버가 이미 완료된 경우에는 fiber::join()이 즉시 반환되고 조인된 파이버 객체는 파이버가 아닙니다(not-a-fiber).
파괴 - Destruction
유효한 실행 컨텍스트를 나타내는 파이버 객체(파이버는 Fiber::joinable()임)가 삭제되면 프로그램이 종료됩니다. Fiber가 이를 시작한 Fiber 객체보다 오래 지속되도록 하려면 Fiber::detach() 메서드를 사용하십시오.
Fiber IDs
fiber::id 클래스의 객체는 Fiber를 식별하는 데 사용할 수 있습니다.
실행 중인 각 fiber에는 fiber::get_id() 멤버 함수를 호출하여 해당 fiber에서 얻을 수 있는 고유한 fiber::id가 있습니다.
fiber::id 클래스의 개체를 복사하여 연관 컨테이너의 키로 사용할 수 있습니다.
전체 범위의 비교 연산자가 제공됩니다.
출력 형식은 지정되지 않지만 스트림 삽입 연산자를 사용하여 출력 스트림에 쓸 수도 있습니다.
fiber::id의 각 인스턴스는 일부 fiber를 참조하거나 fiber가 아닌 것(not-a-fiber)을 참조합니다.
not-a-fiber를 참조하는 인스턴스는 서로 동일하게 비교되지만 실제 fiber를 참조하는 인스턴스와는 동일하지 않습니다.
fiber::id의 비교 연산자는 같지 않은(non-equal) 모든 fiber::id에 대한 전체 순서를 산출합니다.
Enumeration(열거형) launch
launch는 제어가 새로 시작된(newly-launched) 파이버로 즉시 전달되는지 여부를 지정합니다.
dispatch
• Effects:
launch == dispatch로 시작된 파이버는 즉시 입력됩니다. 즉, 디스패치로 파이버를 시작하면 파이버 스케줄러가 나중에 다시 시작할 수 있을 때까지 호출자(이전에 실행 중인 파이버)가 일시 중지됩니다.
post
• Effects:
launch == post로 시작된 Fiber는 준비된 것으로 Fiber 스케줄러에 전달되지만 아직 입력되지 않았습니다. 호출자(이전에 실행 중인 파이버)는 계속해서 실행됩니다. 새로 시작된 파이버는 파이버 스케줄러가 나중에 재개할 기회가 있을 때 입력됩니다.
• Note:
launch가 명시적으로 지정되지 않은 경우 post가 기본값입니다.
⚛ 원문