锁定老帖子 主题:Ruby的伪线程
该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2006-10-28
伪线程如果有一个优异的线程调度器,效率方面甚至可以超过native thread。 比如,ErLang VM,可以达到Soft Realtime 软实时。 -------- in case of some question about Soft Realtime """ A hard realtime system is one which can guarantee that a certain action will always be carried out in less than a certain time. Many simple embedded systems can make hard realtime guarantees, e.g. it is possible to guarantee that a particular interrupt service routine on a Z80 CPU will never take more than 34us. It gets progressively harder to make such guarantees for more complex systems. Many telecomms systems have less strict requirements, for instance they might require a statistical guarantee along the lines of "a database lookup takes less than 20ms in 97% of cases". Soft realtime systems, such as Erlang, let you make that sort of guarantee. """ |
|
返回顶楼 | |
发表时间:2006-10-28
- YARV does not support continuations now
- YARV can support continuations, but it's not a high priority - Ruby 1.9.1 + YARV probably won't have continuations - Matz does want continuations to eventually be supported by YARV 没有callcc就不好玩了... |
|
返回顶楼 | |
发表时间:2006-10-28
buaawhl 写道 伪线程如果有一个优异的线程调度器,效率方面甚至可以超过native thread。 比如,ErLang VM,可以达到Soft Realtime 软实时。 -------- in case of some question about Soft Realtime """ A hard realtime system is one which can guarantee that a certain action will always be carried out in less than a certain time. Many simple embedded systems can make hard realtime guarantees, e.g. it is possible to guarantee that a particular interrupt service routine on a Z80 CPU will never take more than 34us. It gets progressively harder to make such guarantees for more complex systems. Many telecomms systems have less strict requirements, for instance they might require a statistical guarantee along the lines of "a database lookup takes less than 20ms in 97% of cases". Soft realtime systems, such as Erlang, let you make that sort of guarantee. """ Erlang的轻量级进程模型唯一的进程间通讯方式是消息机制。进程内容在相互之间是完全解耦的,要进行数据交换共享必须通过进程间通讯. 线程模型不一样,不论是伪线程还是native线程,允许共享数据. 这个会在实现模式和编程模型上带来很大区别 |
|
返回顶楼 | |
发表时间:2006-10-28
charon 写道 Erlang的轻量级进程模型唯一的进程间通讯方式是消息机制。进程内容在相互之间是完全解耦的,要进行数据交换共享必须通过进程间通讯. 线程模型不一样,不论是伪线程还是native线程,允许共享数据. 这个会在实现模式和编程模型上带来很大区别 Yes. 比如,message passing without shared data, non destructive variable 这些。如果按照单线程的性能来算,ErLang的效率不高。 Erlang VM 相当于把一些编程复杂度转嫁到程序员身上,才换来了高并发。幸亏,还有一个 Pattern Match 的语法亮点,能够抵消一下这些多出来的复杂度。 -------------------- 回到 Ruby 的线程模型。 stackless python 的线程模型是怎样的? 也是 native thread ? 伪线程模型是否应该更容易应对多核CPU? |
|
返回顶楼 | |
发表时间:2006-10-28
buaawhl 写道 回到 Ruby 的线程模型。 stackless python 的线程模型是怎样的? 也是 native thread ? 伪线程模型是否应该更容易应对多核CPU? stackless python 似乎不错 eve的服务器就是用这个开发的。 这个也是伪线程模型? |
|
返回顶楼 | |
发表时间:2006-10-28
rails的ActiveRecord不是线程安全的,如果ruby真提供了native thread的VM,那么rails的代码就得彻底大改动了,这可不是我所希望看到的。
对于运行web应用来说,其实现在ruby1.8.4用FastCGI方式运行挺好的了。也许ruby不应该遵循JavaVM曾经走过的那条路。 |
|
返回顶楼 | |
发表时间:2006-10-28
Stackless python自称microthread,不过编程模型怎么看都是进程方式。
|
|
返回顶楼 | |
发表时间:2006-10-29
qiezi 写道 是不是存在这样一个误解:用真正的多线程会提高效率?用伪线程才会降低效率?
一个操作系统中运行的线程超过CPU数量就可能有线程切换,线程越多,效率就越低,让我们感觉到多线程高效是因为它让一些同步IO延时变得不那么明显了。 在单CPU时,如果有完整的异步IO支持,线程并不是必要的,线程本身是为了简化异步IO调用才需要的。异步IO在很多操作系统中都是最基本的实现,很多同步调用是用异步来模拟的。多CPU时,用多进程也可以充分利用CPU资源。 一个服务器程序,启动一个线程池,对每一个客户请求由一个线程处理,这是最常见的模式。的确,线程池启动上百个线程,每个线程自己的Stack要占有内存空间,切换线程要花费CPU时间,效率不高。但这不是线程的唯一模式。 在Windows下有一种模式叫IO Completion Port,启动的线程数量,和CPU数量相同,编程模式复杂些,但是负载量非常高。有兴趣可以去Google查查。 多进程模式在进程之间的通讯(Inter process communication)开销太大。没有同一进程内两个线程通讯方便。 |
|
返回顶楼 | |
发表时间:2006-10-29
robbin 写道 rails的ActiveRecord不是线程安全的,如果ruby真提供了native thread的VM,那么rails的代码就得彻底大改动了,这可不是我所希望看到的。
对于运行web应用来说,其实现在ruby1.8.4用FastCGI方式运行挺好的了。也许ruby不应该遵循JavaVM曾经走过的那条路。 Rails的目前这种模型,大概是受到了ruby的伪线程的影响才开发的吧。不过web应用现在rails的这种方式的确很简单。就算ruby 提供了native thread也是不用修改代码的。反正都是独立进程运行的。 |
|
返回顶楼 | |
发表时间:2006-10-29
我想微线程的好处就是调度的开销比线程小很多很多,缺点就是不能利用多处理器优势。而线程和进程区别就是共享和不共享内存。
另外I/O模型(IO Completion Port)怎么拿来跟这些东西对比呢。当然我对完成端口也不是很了解,只知道它貌似是罕见的异步I/O模型的实现之一。 stacklesspython 是共享内存的模式,为什么是进程方式呢。它那个channel,我看主要还是用来做同步的,而传输数据的工作简单一个全局变量就可以了。 |
|
返回顶楼 | |