Ruby的伪线程

Ruby的Thread是伪线程,不管代码中写了多少个Thread.new,Ruby都只启动了一个线程去运行这些Thread的代码。

这样做的确使得Ruby的Thread很容易控制,程序也不容易产生类似死锁这类严重的线程问题。但是效率始终无法提高,因为在ruby进程中,实际上只有一个真实的线程在运行,同样的代码在那么多核或者多cpu的电脑上运行效率和单核cpu的电脑上的效率并不会相差多少。

于是有两个衍生问题:

第一,不太可能用ruby编写桌面程序。桌面程序大都是单进程,多线程模型。因为ruby用的是伪线程,Thread.new用的越多,运行效率只会越来越低。CPU需要分配时间片给Ruby进程中的控制Ruby伪线程代码的Thread,然后这个Thread还要在切换运行全部的Ruby伪线程代码。所以在单进程中,Thread.new的应用数目是存在一定上限的。

也许把Ruby代码嵌入到别的项目中就可以应用于桌面程序,不过同样,Thread.new还是不能多用。

同样的,想用Ruby来编写一个稍高性能服务器程序,也是不行的。伪线程问题始终在制约这点。

第二,Ruby项目最好采用多进程模型,只有这样才能更好的利用硬件资源。这个也是目前Ruby Web的设置方式。

想让ruby运行的好,似乎只有这种办法了。不过多进程模型,除了web应用之外,还真不知道那里可以这样用,请知道更多的同学提醒下。

当然,如果hack过ruby的源代码,说不定能够解决这个伪线程问题,不过这个难度甚高,不容易实现。

最后的疑问是"Ruby为啥要用伪线程?"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值