1
neoblackcap 2019-01-15 17:22:03 +08:00
底层 IO 接口手动释放 GIL,这个其实你看看 CPython 源代码就知道了。
|
2
ysc3839 2019-01-15 17:30:02 +08:00 via Android 2
|
3
py1991 OP @neoblackcap 惭愧,c 不会,看不懂=。=
|
4
lihongjie0209 2019-01-15 18:22:27 +08:00
最简单的, Python 标准库中所有的 io 操作都记录一下, 那么你基于标准实现的其他库你可以就知道了.
实在不行, 你还可以看看操作系统是不是有什么接口可以使用 |
5
py1991 OP @ysc3839 do {
Py_BEGIN_ALLOW_THREADS ret = fcntl(fd, code, buf); Py_END_ALLOW_THREADS } while (ret == -1 && errno == EINTR && !(async_err = PyErr_CheckSignals())); 能否解释下,感觉只看懂了线程开始和结束,循环 fcntl 是否结束 |
6
wwqgtxx 2019-01-15 20:34:14 +08:00
@py1991 Py_BEGIN_ALLOW_THREADS 这个宏的意思就是释放 GIL,然后 Py_END_ALLOW_THREADS 再锁上
|
7
cyspy 2019-01-15 20:49:13 +08:00
IO 的核心部分其实是系统内核完成的,调用内核的时候放开就行了
|
8
zhichaozhang 2019-01-15 20:56:18 +08:00 via iPhone
线程执行是抢占式的 是由系统来调度的
|