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为啥要用伪线程?"
分享到:
- 2006-10-28 08:58
- 浏览 14392
- 评论(32)
- 论坛回复 / 浏览 (32 / 25227)
- 查看更多
相关推荐
编程语言的一组库,为线性代数、伪随机数生成、多线程、图像处理、正则表达式和单元测试等任务和结构提供支持。 它包含八十多个单独的库。 CMake 是一个开源、跨平台的工具系列,旨在构建、测试和打包软件。 CMake ...
29. **Map槽与线程**:在MapReduce中,每个map槽对应一个单独的线程,用于执行map任务。 30. **Input Split与Block关系**:MapReduce的input split通常基于HDFS的Block来划分,但可以自定义split逻辑。 31. **...
29. **Map槽与线程**:每个map槽代表一个处理任务的线程。 30. **Input Split与Block关系**:在MapReduce中,input split通常对应于一个或多个HDFS的Block。 31. **NameNode Web UI**:NameNode的Web UI默认运行在...
- 解析:MapReduce提供了多种语言的API,如Python、Ruby等。 19. Hadoop是否支持数据的随机读写? - 答案:不直接支持,HDFS设计为顺序读写优化。 - 解析:HDFS主要设计用于大规模批处理,不擅长随机读写。 20....
29. **map槽与线程**:每个map槽对应一个并行处理任务,不一定是线程,取决于具体实现。选项部分正确。 30. **Input Split与Block**:MapReduce的Input Split可以是Block或其子集,不一定是完整的Block。选项部分...
29. **Map槽与线程**:每个map槽通常对应一个线程,用于执行map任务(答案正确)。 30. **Input Split与Block**:MapReduce的input split通常基于Block,但并不完全等同,split可以根据输入格式被划分为更小的单位...
18. Hadoop虽然主要是用Java开发,但MapReduce也支持其他编程语言,如Python和Ruby,所以这个判断题是错误的。 19. NameNode确实管理metadata,但metadata通常驻留在内存中,而不是每次读写都从磁盘读取或写入,...
- **知识点说明**:虽然Hadoop核心是由Java编写的,但MapReduce作业可以用多种编程语言编写,包括Python、Ruby等,通过相应的API实现。 7. **Hadoop支持数据的随机读写** - **知识点说明**:HDFS主要设计用于流式...
- `Session`:代表一个发送或接收消息的独立线程上下文。 - `MessageProducer`:用于发送消息到指定目的地。 - `MessageConsumer`:用于接收来自特定目的地的消息。 **3.2 对象之间的关系** - 创建`...
这样就不会使得线程因调用故障服务被长时间占用不释放,避免了故障在分布式系统中的蔓延。 断路器示意图 SpringCloud Netflix实现了断路器库的名字叫Hystrix. 在微服务架构下,通常会有多个层次的服务调用. 下面是...