python linux 多线程,最大线程限制实际上是Python / Linux的不相关问题吗?

>“由于GIL,一个线程一次运行.”好吧, GIL意味着只有一个线程可以一次执行Python代码.但是,任何数量的线程都可能正在执行IO,各种其他系统调用或其他不支持GIL的代码.

听起来你的线程主要是网络I / O,任何数量的线程都可以同时进行I / O. GIL比赛可能会相当激烈,有1000个线程,但是您可以随时创建多个Python进程并在它们之间划分I / O线程(即在开始之前fork几次).

>“Linux内核默认情况下只为线程预留8Meg”.我不知道你听到了什么.也许你实际听到的是“在Linux上,默认的堆栈大小通常是8 MiB”,这是真的.每个线程将使用8个MiB的堆栈地址空间(64位无问题)以及附加内存映射和线程进程本身的内核资源.您可以使用threading.stack_size库函数更改堆栈大小,这有助于您有很多线程不进行深层调用.

>>> import threading

>>> threading.stack_size()

0 # platform default, probably 8 MiB

>>> threading.stack_size(64*1024) # 64 KiB stack size for future threads

>这个线程中的其他人建议使用异步/非阻塞框架.嗯,你可以这样做然而,在现代Linux内核上,多线程模型与异步(select / poll / epoll)I / O复用技术具有竞争力.重写代码以使用异步模型是一项非常简单的工作,因此如果我无法从线程模型获得所需的性能,我只会执行此操作.如果你的线程真的试图模拟人类的延迟(例如,花费大部分时间睡觉),那么很多情况下异步方法实际上更慢.我不知道这是否适用于Python,其中减少的GIL争用可能值得切换.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值