併發: 廚師同時接收到了2個客人點了的菜單須要處理.
順序執行: 若是隻有一個廚師,那麼他只能一個菜單接着一個菜單的去完成.
並行執行: 若是有兩個廚師,那麼就能夠並行,兩我的一塊兒作菜.html
https://ruby-china.org/topics/11248segmentfault
一旦調用外部IO操做,當前線程就會釋放CPU內核控制權,另一個線程就會得到CPU資源。安全
https://ruby-china.org/topics/23183ruby
https://draveness.me/sidekiq多線程
fiber併發和多線程併發的原理其實差很少,都是當前執行線程(纖程)在執行到外部IO調用的時候,放棄CPU控制權,讓另外一個線程(纖程)來獲取CPU。主要差別在於fiber併發只佔用1個操做系統線程,由應用程序來調度纖程;而多線程併發佔用n個操做系統線程,由Ruby VM來調度線程。併發
所以二者的性能差別主要是調度方式帶來的:纖程的場景切換很是輕量級,而多線程的場景切換代價高於纖程,所以理論上來講fiber併發性能會更好異步
https://segmentfault.com/a/1190000010211352ide
http://www.importnew.com/28021.html性能
http://20bits.com/article/an-eventmachine-tutorial操作系統
https://www.slideshare.net/KyleDrake/hybrid-concurrency-patterns
Celluloid::Proxy::Async
對象會截獲方法的調用, 而後保存到 Actor 併發對象的調用隊列中, 程序沒必要等待響應就能夠往下執行(異步). 每一個併發對象都有一個本身調用隊列, 而且按順序地一個接一個執行裏邊的方法調用.
https://tonyarcieri.com/a-gentle-introduction-to-nio4r