# 플랫폼 지원

`asyncio` 모듈은 이식성이 있도록 설계되었지만, 플랫폼의 하부 아키텍처와 기능으로 인해 일부 플랫폼에는 미묘한 차이점과 제약이 있습니다.

## 모든 플랫폼

- `loop.add_reader()`와 `loop.add_writer()`는 파일 I/O를 감시하는데 사용할 수 없습니다.

## 윈도우

윈도우의 모든 이벤트 루프는 다음 메서드를 지원하지 않습니다:

- `loop.create_unix_connection()` 와 `loop.create_unix_server()`는 지원되지 않습니다. `socket.AF_UNIX` 소켓 패밀리는 유닉스에만 적용됩니다.

- `loop.add_signal_handler()`와 `loop.remove_signal_handler()`는 지원되지 않습니다.

`SelectorEventLoop`에는 다음과 같은 제약이 있습니다:

- `SelectSelector`는 소켓 이벤트를 기다리는 데 사용됩니다: 소켓을 지원하며 512개의 소켓으로 제한됩니다.

- `loop.add_reader()`와 `loop.add_writer()`는 소켓 핸들만 받아들입니다 (예를 들어, 파이프 파일 기술자는 지원되지 않습니다).

- 파이프는 지원되지 않으므로, `loop.connect_read_pipe()`와 `loop.connect_write_pipe()` 메서드는 구현되지 않습니다.

- 서브 프로세스는 지원되지 않습니다, 즉, `loop.subprocess_exec()` 와 `loop.subprocess_shell()` 메서드가 구현되지 않습니다.

`ProactorEventLoop`에는 다음과 같은 제약이 있습니다:

- `loop.create_datagram_endpoint()` 메서드는 지원되지 않습니다.

- `loop.add_reader()`와 `loop.add_writer()` 메서드는 지원되지 않습니다.

윈도우에서 단조 시계의 해상도는 대개 15.6 msec 근처입니다. 최상의 해상도는 0.5 msec입니다. 해상도는 하드웨어(HPET이 사용 가능한지)와 윈도우 구성에 따라 다릅니다.

### 윈도우에서의 서브 프로세스 지원

윈도우의 `SelectorEventLoop`는 서브 프로세스를 지원하지 않습니다. 윈도우에서는, 대신 `ProactorEventLoop`를 사용해야 합니다:

    import asyncio

    asyncio.set_event_loop_policy(
        asyncio.WindowsProactorEventLoopPolicy())

    asyncio.run(your_code())

`ProactorEventLoop`가 자식 프로세스를 관찰하는 다른 메커니즘을 가지고 있으므로, `policy.set_child_watcher()` 함수도 지원되지 않습니다.

## macOS

최신 macOS 버전은 완전하게 지원됩니다.

macOS <= 10.8

macOS 10.6, 10.7 및 10.8에서, 기본 이벤트 루프는 `selectors.KqueueSelector`를 사용하는데, 이 버전에서는 문자 장치를 지원하지 않습니다. 이러한 이전 버전의 macOS에서 문자 장치를 지원하려면, `SelectorEventLoop`가 `SelectSelector` 나 `PollSelector`를 사용하도록 수동으로 구성할 수 있습니다. 예:

    import asyncio
    import selectors

    selector = selectors.SelectSelector()
    loop = asyncio.SelectorEventLoop(selector)
    asyncio.set_event_loop(loop)