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

Project1

 找回密码
 注册会员
搜索
查看: 3871|回复: 6
打印 上一主题 下一主题

[讨论] RGSS对CPU的利用

[复制链接]

Lv1.梦旅人

梦石
0
星屑
110
在线时间
953 小时
注册时间
2007-4-25
帖子
805
1
发表于 2012-8-9 12:48:43 | 显示全部楼层
本帖最后由 苏小脉 于 2012-8-9 12:49 编辑
Ruby中使用的线程是用户级线程,由Ruby解释器进行切换管理。其效率要低于由OS管理线程的效率,且不能使用多个CPU,这确实是它的缺点。但其优点也很明显,即可移植性很高。

「用戶級線程」用詞不妥。「用戶級」以及與之相對的「內核級」都是操作系統領域的術語,在這個論域中,「用戶級線程」指的是用戶程序可以操縱的線程,而與之對應的是只有內核才能操縱並且對用戶程序不可見的「內核線程」,也就是操作系統內核本身需要的線程。編程語言提供的線程幾乎都是用戶線程,但大致可分為兩類:本地線程和綠色(輕量級)線程。Ruby 1.8 以及之前的版本提供的線程是綠色線程,1.9 以後採用了本地線程。

另外,「不能使用多个CPU」是因為 Ruby 1.8 只有一個調度器線程,如果 Ruby 像 Erlang 那样支持多线程调度,也就是有多个不同的线程专门负责线程调度,那自然也能在使用绿色线程的同时充分利用多核资源。Erlang + SMP 多線程調度的組合下進行併發計算不輸於本地線程。

点评

用户级线程这句话也没有什么错误吧?Ruby本身的线程就是属于用户级的线程,绿色线程寄托于一个用户级线程,本身不算是一个用户级线程的一部分么  发表于 2012-8-19 20:11
啊,怎么老板和老板娘都来了。  发表于 2012-8-13 09:22
[email protected]:~> repeat 1 fortune
Matz is nice, so we are nice.
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
110
在线时间
953 小时
注册时间
2007-4-25
帖子
805
2
发表于 2012-8-25 00:16:07 | 显示全部楼层
本帖最后由 苏小脉 于 2012-8-25 00:42 编辑

@harinlen
用户级线程这句话也没有什么错误吧?Ruby本身的线程就是属于用户级的线程,绿色线程寄托于一个用户级线程,本身不算是一个用户级线程的一部分么

說到底還是歧義的問題,我相信說這句話的人也知道這些概念,只是說出來的時候不夠嚴謹。原話是「Ruby中使用的线程是用户级线程,由Ruby解释器进行切换管理」,兩個子句連起來容易產生歧義。
1、無論任何編程語言,只要是用戶程序,其操縱的線程幾乎都是用戶線程(除非底層 OS 提供了操縱內核線程的系統調用),在討論綠色線程 vs 本地線程在 CPU 效用上的區別時提這個沒什麼意義,反而容易讓人聯想到「其他語言中使用的線程是内核线程」這個命題。
2、「由Ruby解释器进行切换管理」是綠色線程的特性,和前一個子句「Ruby中使用的线程是用户级线程」並無因果。

@R-零
无论是xp、VA都只能利用单核,

只要有底層接口,一切都有可能。所有 RM 版本都可以通過 Win32API (VA 可以通過 dl 庫)操縱本地線程,所以都可以利用多核,只不過沒有用到 Ruby 線程。要用 Ruby 線程的話,也可以通過 Ruby 的 API (rb_thread_blocking_region(),甚至直接 native_mutex_unlock(vm->global_vm_lock) 之類的)操縱全局解釋器鎖,只要在一個安全的區域內解鎖(當然,影響 Ruby 虛擬機內部結構的操作很難保證安全),在這個區域內就可以利用多核,達成真正的併發。

点评

话说@失效了,私今日才发现这帖= =确实这是个歧义句,也木有必要在一个确定的问题上纠结了的说~  发表于 2012-9-22 22:48
[email protected]:~> repeat 1 fortune
Matz is nice, so we are nice.
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-16 20:49

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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