平臺支援
********

"asyncio" module（模組）被設計為可攜的 (portable)，但由於平臺的底層架
構和功能不同，在一些平臺上存在細微的差異和限制。


所有平台
========

* "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 上的所有事件迴圈都不支援以下 method（方法）：

* 不支持 "loop.create_unix_connection()" 和
  "loop.create_unix_server()"。 "socket.AF_UNIX" 套接字族是 Unix 专属
  的。

* 不支援 "loop.add_signal_handler()" 和 "loop.remove_signal_handler()"
  。

"SelectorEventLoop" 有以下限制：

* "SelectSelector" 只被用於等待 socket 事件：它支援 socket 且最多支援
  512 個 socket。

* "loop.add_reader()" 和 "loop.add_writer()" 只接受 socket 處理函式（
  例如不支援 pipe 檔案描述器 (pipe file descriptor)）。

* 因為不支援 pipe，所以 "loop.connect_read_pipe()" 和
  "loop.connect_write_pipe()" method 沒有被實作出來。

* 不支援子行程 (subprocess)，也就是說 "loop.subprocess_exec()" 和
  "loop.subprocess_shell()" method 沒有被實作出來。

"ProactorEventLoop" 有以下限制：

* 不支援 "loop.add_reader()" 和 "loop.add_writer()" method。

Windows 上單調時鐘 (monotonic clock) 的解析度大約為 15.6 毫秒。最佳的
解析度是 0.5 毫秒。解析度和硬體（HPET 是否可用）與 Windows 的設定有關
。


Windows 的子行程支援
--------------------

在 Windows 上，預設的事件迴圈 "ProactorEventLoop" 支援子行程，而
"SelectorEventLoop" 則不支援。

也不支援 "policy.set_child_watcher()" 函式，"ProactorEventLoop" 在監視
子行程上有不同的機制。


macOS
=====

完整支援現在普遍流行的 macOS 版本。

-[ macOS <= 10.8 ]-

在 macOS 10.6、10.7 和 10.8 上，預設的事件迴圈是使用
"selectors.KqueueSelector"，在這些版本上它並不支援字元裝置 (character
device)。可以手工設置 "SelectorEventLoop" 來使用 "SelectSelector" 或
"PollSelector" 以在這些舊版 macOS 上支援字元裝置。例如：

   import asyncio
   import selectors

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