# プラットフォームでのサポート

`asyncio` モジュールは可搬的であるようにデザインされていますが、いくつかのプラットフォームでは、その根底にあるアーキテクチャや性能による微妙な動作の違いや制限があります。

## 全てのプラットホーム

- `loop.add_reader()` と `loop.add_writer()` をファイル I/O を監視するためには使えません。

## Windows

ソースコード: Lib/asyncio/proactor_events.py, Lib/asyncio/windows_events.py, Lib/asyncio/windows_utils.py

バージョン 3.8 で変更: Windows では `ProactorEventLoop` がデフォルトのイベントループになりました。

全ての Windows 上のイベントループは以下のメソッドをサポートしません:

- `loop.create_unix_connection()` と `loop.create_unix_server()` はサポートされません。 `socket.AF_UNIX` ソケットファミリーは 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()` の2つのメソッドは未実装です。

- Subprocesses はサポートされていません。すなわち `loop.subprocess_exec()` と `loop.subprocess_shell()` の2つのメソッドは未実装です。

`ProactorEventLoop` は以下の制限があります:

- `loop.add_reader()` と `loop.add_writer()` はサポートされていません。

The resolution of the monotonic clock on Windows is usually around 15.6 msec. The best resolution is 0.5 msec. The resolution depends on the hardware (availability of HPET) and on the Windows configuration.

### Windows におけるサブプロセスのサポート

Windows において、デフォルトのイベントループ `ProactorEventLoop` はサブプロセスをサポートしますが、 `SelectorEventLoop` はサポートしません。

`policy.set_child_watcher()` 関数もサポートされません。 `ProactorEventLoop` は子プロセスを監視するための異なる仕組みを持っています。

## macOS

最近の macOS バージョンは完全にサポートされています。

10.8 以前の macOS

macOS 10.6, 10.7 および 10.8 では、デフォルトイベントループは `selectors.KqueueSelector` をしていますが、このクラスはこれらの macOS バージョンのキャラクターデバイスをサポートしていません。これらの macOS バージョンでキャラクターデバイスをサポートするためには `SelectorEventLoop` で `SelectSelector` または `PollSelector` を使うように手動で設定します。以下はその例です:

    import asyncio
    import selectors

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