关于线程Thread、协程Coroutine、生成器Generator、yield资料

标签: tech | 发表时间:2011-07-30 07:40 | 作者:admin tangsty
出处:http://sunxiunan.com

关于Green Thread(绿色环保线程)、Native Thread,以及线程的一些普及问题,下面这个presentation最为翔实

http://www.slideshare.net/tmm1/threaded-awesome-1922719

另外毫无疑问要看看维基百科上的这一条 http://en.wikipedia.org/wiki/Thread_%28computer_science%29

 

如果你像我一样也喜欢Lua这个支持协程http://en.wikipedia.org/wiki/Coroutine (或者我们可以称之为Green Thread)特性的编程语言,这一篇论文非常值得参考,印象中这一篇论文以及《revisiting coroutine》介绍了为什么Lua不实现抢先式以及continuation的设计思路 www.inf.puc-rio.br/~roberto/docs/corosblp.pdf  http://www.inf.puc-rio.br/~roberto/docs/MCC15-04.pdf

这一篇教程可以帮助你了解Lua协程的基本用法http://lua-users.org/wiki/CoroutinesTutorial 

有人也许质疑Lua的协程功能不支持C函数扩展,那么可以试试大名鼎鼎的LuaJit作者出品的Coco http://coco.luajit.org/ 

喜欢中文资料的可以参考TimYang这篇介绍http://timyang.net/lua/lua-coroutine/ 

另外如果想实战使用的可以试试copas http://keplerproject.github.com/copas/manual.html

我也有翻译一篇Lua协程与Python Generator比较的文字 http://sunxiunan.com/?p=1654

还有使用Lua协程实现斐波拉切 http://sunxiunan.com/?p=1689

 

关于Native Thread,还有一个词语叫做Fiber纤程,意思是比纤程更细微轻量,好像Pthread和Windows都有支持。印象中看到过一篇文字说C#的yield就是利用Fiber实现,这个问题先放着。http://en.wikipedia.org/wiki/Fiber_%28computer_science%29 另外也有人称之为绿色环保线程 http://en.wikipedia.org/wiki/Green_threads

Erlang也有类似术语,叫做Green Process,大致意思差不多(?)。

Python相关概念http://en.wikipedia.org/wiki/Generator_%28computer_programming%29

前面提到了一个continuation概念 http://en.wikipedia.org/wiki/Continuation 不过好像前面Lua论文里面提到过,设计一个正确continuation的程序太复杂(就我看来能正确理解coroutine这种简化级别continuation的都不容易),所以很少有程序语言支持(smalltalk?)。

相关 [线程 thread 协程] 推荐:

关于线程Thread、协程Coroutine、生成器Generator、yield资料

- tangsty - 我的宝贝孙秀楠 ﹣C++, Lua, 大连,程序员
关于Green Thread(绿色环保线程)、Native Thread,以及线程的一些普及问题,下面这个presentation最为翔实. 另外毫无疑问要看看维基百科上的这一条 http://en.wikipedia.org/wiki/Thread_%28computer_science%29. 这一篇教程可以帮助你了解Lua协程的基本用法http://lua-users.org/wiki/CoroutinesTutorial .

Java Thread多线程

- - CSDN博客推荐文章
Java Thread多线程. Java 多线程例子1 小例子. super("zhuyong");//设置线程的名字,默认为“TestThread”. Java 多线程例子2 前台线程(用户线程) 后台线程(守护线程 ). 1,setDaemon(true)后就是后台线程(守护线程 ),反之就是前台线程(用户线程).

Nginx线程池性能提升9倍(Thread Pools in NGINX Boost Performance 9x!)

- - SegmentFault 最新的文章
五年级英语水平,端午家庭作业. Nginx以异步、事件驱动的方式处理连接. 传统的方式是每个请求新起一个进程或线程,Nginx没这样做,它通过非阻塞sockets、epoll、kqueue等高效手段,实现一个worker进程处理多个连接和请求. 一般情况下下是一个CPU内核对应一个worker进程,所以worker进程数量固定,并且不多,所以在任务切换上消耗的内存和CPU减少了.

并发之痛 Thread,Goroutine,Actor

- - 午夜咖啡
本文基于我在2月27日Gopher北京聚会演讲整理而成,进行了一些补充以及调整. 投稿给《高可用架构》公众号首发. 聊这个话题之前,先梳理下两个概念,几乎所有讲并发的文章都要先讲这两个概念:. 并发(concurrency) 并发的关注点在于任务切分. 举例来说,你是一个创业公司的CEO,开始只有你一个人,你一人分饰多角,一会做产品规划,一会写代码,一会见客户,虽然你不能见客户的同时写代码,但由于你切分了任务,分配了时间片,表现出来好像是多个任务一起在执行.

在 TDA 工具里看到 Java Thread State 的第一反应是

- - 博客园_旁观者-郑昀
使用 TDA 工具,看到大量 Java Thread State 的第一反应是:. 1,线程状态为“waiting for monitor entry”:. 意味着它  在等待进入一个临界区 ,所以它在”Entry Set“队列中等待. 此时线程状态一般都是 Blocked:. 2,线程状态为“waiting on condition”:.

cassandra节点down机(java.lang.OutOfMemoryError: unable to create new native thread)

- - 大数据、敏捷(改善)
在对集群做压力测试的时候,发现有节点down机,错误信息如下. google后查明原因,由于Linux "max user processes( nproc)"所致,我操作系统的是CentOS 6 64bit,修改方法如下:. ulimit -u # 查看nproc. ulimit -u 65535 # 设置nproc,仅当前会话有效.

三个实例演示 Java Thread Dump 日志分析

- - 博客园_旁观者
jstack Dump 日志文件中的线程状态. dump 文件里,值得关注的线程状态有:. Deadlock(重点关注) . 执行中,Runnable   . Waiting on condition(重点关注) . Waiting on monitor entry(重点关注). 暂停,Suspended.

使用Thread Pool不当引发的死锁

- - ImportNew
多线程锁定同一资源会造成死锁. 线程池中的任务使用当前线程池也可能出现死锁. RxJava 或 Reactor 等现代流行库也可能出现死锁. 死锁是两个或多个线程互相等待对方所拥有的资源的情形. 举个例子,线程 A 等待 lock1,lock1 当前由线程 B 锁住,然而线程 B 也在等待由线程 A 锁住的 lock2.

协程(三)协程与Continuation

- Eric - Indie 之路
Continuation表示一个运算在其指定位置的剩余部分. 当Continuation作为语言的第一类(First-class)对象时,可用于实现多种控制结构. 同样作为控制结构,First-class continuation的表达力比协程更加强大,而且有着明确定义的语义,以至于在它出现之后对协程的研究就几乎完全停止了.

协程(二):协程的应用

- vento - python.cn(jobs, news)
# 感谢“书香”推荐: @shuxiang29. 上一篇中对协程的概念做出了解释和澄清. 总的来说,完全协程才算得上是真正意义上的协程,其它如生成器等只是部分实现了协程概念的非完全协程,我们之后主要讨论完全协程. 协程本质是一种控制抽象,它的价值在于可以简洁优雅地实现一些控制行为. 在协程中,控制可以从当前执行上下文跳转到程序的其它位置,并且可以在之后的任意时刻恢复当前执行上下文,控制从跳出点处继续执行.