平台支持
********

"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()" 方法没有实现。

* 不支持 Subprocesses，也就是  "loop.subprocess_exec()" 和
  "loop.subprocess_shell()" 方法没有实现。

"ProactorEventLoop" 有下列限制：

* 不支持  "loop.add_reader()" 和 "loop.add_writer()" 方法。

通常 Windows 上单调时钟的分辨率约为 15.6 毫秒。最佳分辨率是 0.5 毫秒。
分辨率依赖于具体的硬件 (HPET 的可用性) 和 Windows 的设置。


Windows 的子进程支持
--------------------

在 Windows 上，默认的事件循环 "ProactorEventLoop" 支持子进程，而
"SelectorEventLoop" 则不支持。


macOS
=====

完整支持现代 macOS 版本。

-[ macOS <= 10.8 ]-

在 macOS 10.6, 10.7 和 10.8 上，默认的事件循环使用
"selectors.KqueueSelector"，在这些版本上它并不支持字符设备。可以手工配
置 "SelectorEventLoop" 来使用 "SelectSelector" 或 "PollSelector" 以在
这些较老版本的 macOS 上支持字符设备。例如:

   import asyncio
   import selectors

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