设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
123
返回列表 发新帖
楼主: 一箭烂YiJL
打印 上一主题 下一主题

【更新】提高游戏运行速度(v1.01)

[复制链接]

Lv1.梦旅人

梦石
0
星屑
110
在线时间
953 小时
注册时间
2007-4-25
帖子
805
21
发表于 2011-4-27 13:46:46 | 只看该作者
本帖最后由 苏小脉 于 2011-4-27 13:47 编辑
所以,即使是ruby里面的Thread.new出来的线程应该也是属于RPGMake的进程,这样的线程就会和其他的线程分摊这个进程的CPU时间。

Ruby 1.8 的线程是绿色线程,是由解释器调度的,不能提升丝毫性能。其存在意义只是为了让语言拥有协程,能进行多任务设计。虽然后来 Ruby 1.9 采用了 OS 线程,但由于 YARV 不像 JVM 那么强力,只能和 CPython 一样部署全局解释器锁,大部分场合下仍然没有真正的并发,所以也不能提升性能。唯一的好处就是 Ruby 标准库以及第三方扩展可以在短时间内手动把锁解开达到并发,从而解决一些性能上的问题,比如阻塞的 I/O 操作。
RM主线程被用满的时候应该是不存在的。

这里“RM主线程”有歧义,是指 RM 的 OS 主线程,还是 Ruby 层面的绿色线程?如果用来指后者,当某个 Ruby 线程进行耗时的外部函数调用时,其它的 Ruby 线程确实会尽数僵死,因为其任务调度是由解释器负责的,而自始至终解释器都只是一条 OS 线程。
同进程的线程会不会使得另外一个线程没有机会被调度,这个取决于操作系统的任务调度机制,对于大多数操作系统而言应该是不会的。除非那个进程本身难以被调度。多线程提供的就是一种并行的假象(多CPU是真的并行。。。),如果会有一个线程无法执行,那就失去线程的意义了。

确实,如今家用计算机上常见的系统都是抢先式多任务系统,采用轮转式调度,每个线程的执行和操作系统为其分配的时间片有关,不会因为其中一个线程消耗所有 CPU 时间而出现整个系统假死的情况。不过,很多受时间约束的实时嵌入式操作系统都采用合作式调度,因为只有这样,实时程序才能有一个确定性的算法精确地控制实时序列,比如火箭上的航线修正系统。其实合作式多任务是最早被采用的调度方式,以前 Windows 9x,Mac OS Classic 等遗留系统都曾经用过。因为合作式多任务系统有上述排程缺陷,就逐渐过渡到了抢先式多任务。
[email protected]:~> repeat 1 fortune
Matz is nice, so we are nice.
回复 支持 反对

使用道具 举报

Lv1.梦旅人

风之塞尔达

梦石
0
星屑
50
在线时间
57 小时
注册时间
2005-10-22
帖子
2492

贵宾

22
发表于 2011-4-27 18:30:12 | 只看该作者
苏小脉 发表于 2011-4-27 13:46
Ruby 1.8 的线程是绿色线程,是由解释器调度的,不能提升丝毫性能。其存在意义只是为了让语言拥有协程,能 ...

呃。。 看来我想当然了  我还以为1.8的线程是系统线程。。。
另外  你严谨的可以出教科书了 :lol
在程序里延续塞尔达的传说, 在画板上勾勒塞尔达的轮廓!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-29 06:40

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表