我有一次试过90多 |
本帖最后由 苏小脉 于 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-8-9 12:49 编辑 Ruby中使用的线程是用户级线程,由Ruby解释器进行切换管理。其效率要低于由OS管理线程的效率,且不能使用多个CPU,这确实是它的缺点。但其优点也很明显,即可移植性很高。 「用戶級線程」用詞不妥。「用戶級」以及與之相對的「內核級」都是操作系統領域的術語,在這個論域中,「用戶級線程」指的是用戶程序可以操縱的線程,而與之對應的是只有內核才能操縱並且對用戶程序不可見的「內核線程」,也就是操作系統內核本身需要的線程。編程語言提供的線程幾乎都是用戶線程,但大致可分為兩類:本地線程和綠色(輕量級)線程。Ruby 1.8 以及之前的版本提供的線程是綠色線程,1.9 以後採用了本地線程。 另外,「不能使用多个CPU」是因為 Ruby 1.8 只有一個調度器線程,如果 Ruby 像 Erlang 那样支持多线程调度,也就是有多个不同的线程专门负责线程调度,那自然也能在使用绿色线程的同时充分利用多核资源。Erlang + SMP 多線程調度的組合下進行併發計算不輸於本地線程。 |
1)= =你需要ACE 2)粒子用GPU跑 3)渲染是单线程的,所有引擎都这样。 |
站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作
GMT+8, 2024-11-28 15:52
Powered by Discuz! X3.1
© 2001-2013 Comsenz Inc.