- 主题:觉得协程不是一个太好的编程模型
只是说明您的应用还没到要抠线程切换开销的程度
【 在 hgoldfish 的大作中提到: 】
: 现在操作系统调度 1000 个线程也不是事吧。我最近写的一个 python 就是每个进程给分配 64 个线程的线程池。在一台机器上面跑几百个进程,合计就是 2K-4K 个线程。好像也没啥问题啊,大多数线程都是不被调度的。
:
--
FROM 114.241.228.*
如果仅仅是这样,我认为就没有必要设计协程,还不如接着优化线程这种东西。
我觉得你可能没有想清楚你的需求到底是什么,再想想
注:不要为假设的需求寻求实现
【 在 finlab 的大作中提到: 】
:
: 在线程池阻塞,是因为设计人员认为线程是一项紧缺的重型资源,所以给线程池分配较少的线程数。
:
: 按照我的想法,应该有更轻量级的更低开销的线程,这样开一个足够大的线程池,就基本不担心阻塞。
:
#发自zSMTH@CDU.MP
--
FROM 113.143.107.*
我都用 python 了,你跟我说要扣线程切换。。
【 在 z16166 的大作中提到: 】
: 只是说明您的应用还没到要抠线程切换开销的程度
--
FROM 59.61.196.*
那我说得也没问题,哈哈
其实都说得没问题,都是说的其中一个side
前面那位说线程池里开1万个线程,如果开线程的开销低(类似Erlang的那种)
你说的OS调度1千个线程也很容易。linux老早就有O(1)调度了,后来换了几次。
我说的是即便是有O(1)调度,也有IOCP那些尽量不切换线程的需求。
【 在 hgoldfish 的大作中提到: 】
: 我都用 python 了,你跟我说要扣线程切换。。
:
--
FROM 114.241.228.*
关键不是线程数,是栈数,无论线程协程,栈多了就有问题。每个栈2M的话,10000个线程,需要20G内存。当然也许将来不是问题。如果需要更多栈的话,问题更严重一些。
【 在 finlab 的大作中提到: 】
: 在线程池阻塞,是因为设计人员认为线程是一项紧缺的重型资源,所以给线程池分配较少的线程数。
: 按照我的想法,应该有更轻量级的更低开销的线程,这样开一个足够大的线程池,就基本不担心阻塞。
: 比如,原来只开10个线程,现在我开10000个线程。
: ...................
--
修改:ylh1969 FROM 221.218.60.*
FROM 221.218.60.*
线程数等于核数时效率最高,几乎没有调度开销。
当上千线程全忙时,调度开销相当可观。
【 在 finlab 的大作中提到: 】
: 在线程池阻塞,是因为设计人员认为线程是一项紧缺的重型资源,所以给线程池分配较少的线程数。
: 按照我的想法,应该有更轻量级的更低开销的线程,这样开一个足够大的线程池,就基本不担心阻塞。
: 比如,原来只开10个线程,现在我开10000个线程。
: ...................
--
FROM 221.218.60.*
这在现代操作系统下都不是事。你看一下 mmap(MAP_STACK) 就是专门解决你这问题的。申请 1K 个线程,一共也就用 16MB.
【 在 ylh1969 的大作中提到: 】
: 关键不是线程数,是栈数,无论线程协程,栈多了就有问题。每个栈2M的话,10000个线程,需要20G内存。当然也许将来不是问题。如果需要更多栈的话,问题更严重一些。
--
FROM 59.61.196.*
协程调度同样有开销。
不过现在硬件线程切换核心的成本确实太高。 除了线程切换本身,切换后核心缓存作废影响也很大。
所以要硬件和操作系统一起想办法。
不过另一方面,对于IO密集的高并发,线程池里的线程多数时候在等待IO,并不会频繁发生调度。
【 在 ylh1969 的大作中提到: 】
: 线程数等于核数时效率最高,几乎没有调度开销。
: 当上千线程全忙时,调度开销相当可观。
--
FROM 223.72.68.*
现代操作系统也没那么弱鸡。1K 个线程就算全忙也就那样。
写这种类型的程序,尽量不要陷入内核才是王道。只要不陷入内核,操作系统每隔 10ms 切个时间片,一秒也就切 100 次。约等于零开销。
【 在 ylh1969 的大作中提到: 】
: 线程数等于核数时效率最高,几乎没有调度开销。
: 当上千线程全忙时,调度开销相当可观。
--
FROM 59.61.196.*
现在服务器内存都上T了, 内存不是大问题。
大家在开发时,可以尽量对线程设置较小的栈空间。更好满足需要就好。
另外,有意识节省栈的使用,不要放大对象在栈上。
【 在 ylh1969 的大作中提到: 】
: 关键不是线程数,是栈数,无论线程协程,栈多了就有问题。每个栈2M的话,10000个线程,需要20G内存。当然也许将来不是问题。如果需要更多栈的话,问题更严重一些。
--
FROM 223.72.68.*