Ruby 1.9.1中的本机线程,对我有什么好处?
所以,Ruby 1.9.1现在是。Rails应该和它一起工作,慢慢地,gems被移植到它上面 它有本机线程和全局解释器锁(GIL)Ruby 1.9.1中的本机线程,对我有什么好处?,ruby,concurrency,Ruby,Concurrency,所以,Ruby 1.9.1现在是。Rails应该和它一起工作,慢慢地,gems被移植到它上面 它有本机线程和全局解释器锁(GIL) 既然有了GIL,那么本机线程比1.9.1中的绿色线程有什么好处吗 我认为最大的胜利是基于C的扩展。例如,MySQL适配器可以非常干净地运行长时间运行的数据库查询,而不会阻塞所有其他Ruby线程 1.9中的线程是本机线程,但它们已经“减速”,一次只允许运行一个线程。这是因为如果线程真的并行运行,它会混淆现有代码 优点: IO现在在线程中是异步的。如果一个线程阻塞IO
既然有了GIL,那么本机线程比1.9.1中的绿色线程有什么好处吗 我认为最大的胜利是基于C的扩展。例如,MySQL适配器可以非常干净地运行长时间运行的数据库查询,而不会阻塞所有其他Ruby线程 1.9中的线程是本机线程,但它们已经“减速”,一次只允许运行一个线程。这是因为如果线程真的并行运行,它会混淆现有代码 优点:
- IO现在在线程中是异步的。如果一个线程阻塞IO,那么另一个线程将继续,直到IO完成
- C扩展可以使用真正的线程
- 任何不是线程安全的C扩展都可能存在使用线程时很难发现的问题。无法将扩展标记为线程不安全,以防止它与线程一起使用
- 类名是相同的。本机线程类应该被命名为其他名称
- 最糟糕的是,线程在不同平台上的工作方式不同!例如,
在Solaris、Windows和Linux之间是不同的。像priority()
这样的东西在Linux中运行良好,其他线程也有机会运行。但是,在Solaris线程上,线程占用了进程的时间,您永远不会退出李>loop{}