1
neoblackcap 2017-02-26 23:42:28 +08:00
不就是封装一个线程池吗?这个不会堵塞主线程,就是这样
|
2
xiusedelang OP @neoblackcap ,对 asyncio 不太了解,我猜测它是用了一个单独线程执行所有协程工作。这样有大量文件 IO 时应该并没有带来多大好处,不过是把阻塞放到另一个线程了。我觉得这个库应该使用 epoll 类的异步 API ,才能完全发挥 asyncio 的优势,但是看看代码好像并没有。
|
3
neoblackcap 2017-02-27 00:05:45 +08:00
@xiusedelang epoll 不支持本地 IO,非堵塞只是指不堵塞主线程,除非 Windows ,要不然你要完全用户态线程不堵塞是做不到的,那需要的是异步 IO 接口,内核不支持都没有用
|
4
ryd994 2017-02-27 03:11:17 +08:00 via Android
|
5
xiusedelang OP @neoblackcap epoll 在这里确实不适合,见笑了
@ryd994 coroutine 里面调用系统的阻塞 API ,还是要阻塞的吧。我觉得这个库应该用你说的这几个非阻塞 API ,但翻了半天代码它的确是用的最普通的阻塞方法。 |
6
tinyproxy 2017-02-27 09:47:03 +08:00 via iPhone
你到 stackoverflow 搜搜文件异步 io 的实现方式,线程池是比较简单方便而且平台兼容性比较好的做法。
|
7
fengjianxinghun 2017-02-27 10:54:26 +08:00
@ryd994 现在的 aio 都是线程实现的。。。
|
8
kuroismith 2017-02-27 14:29:01 +08:00
感觉没什么意义, 之前测试了一下, 读 100 个文件, aiofiles 比普通的方式还要更慢
|