火的一逼的協程

来源:https://www.cnblogs.com/lgxZJ/archive/2018/01/14/8284090.html
-Advertisement-
Play Games

最近老是聽說協程很火,心也很癢癢想知道這到底是個什麼東西,今天就花功夫看了看Boost庫里的Coroutine。誰不曾想Boost庫這麼難搞,等到要寫代碼時編譯出錯了。其實這也不能怪Boost,大部分Boost庫都是以頭文件的形式提供的,直接include就可以了。但是Coroutine這個東西用了 ...


最近老是聽說協程很火,心也很癢癢想知道這到底是個什麼東西,今天就花功夫看了看Boost庫里的Coroutine。誰不曾想Boost庫這麼難搞,等到要寫代碼時編譯出錯了。其實這也不能怪Boost,大部分Boost庫都是以頭文件的形式提供的,直接include就可以了。但是Coroutine這個東西用了Context這麼個需要編譯的東西,偏偏機子上的VS2013用的SDK版本少了某個文件,編譯不過。想想還是算了,瞭解的主要目的達到了就行。不過這裡還是想吐糟一句,Coroutine對VS版本的支持真差!

協程(Coroutine)是什麼

其實從名字上我們就能看出端倪,我們這裡分兩方面來看待。

,重點放在程字上,它與線程、纖程頗有關聯。這三者都可以作為執行單元,不同的是層次不同:

  • 線程,系統級執行單元。

  • 纖程,系統級執行單元,比線程更輕量,但是需要開發者自己調度
  • 協程,語言級執行單元,實際上就是語言層面的纖程,需要開發者自己調度。實際上Boost.Coroutine2內部的一種實現方式就是使用了Windows的纖程(Fiber)。

線程是搶占式的,可以被系統調度,從而實現真正意義上的併發,提高運行效率;然而纖程與協程需要開發者自己調度,換句話說系統不會對它們進行調度,它們都運行在宿主線程上。原則上說,如果協程或者纖程是以函數形式實現的,那麼只要它們是線程安全的,它們就能夠被不同的線程執行。

協程(Coroutine),重點在routine上。顧名思義,協程與函數(或者叫常式,routine)是非常相似的。一開始我還以為Coroutine有多神奇,看了Boost.Coroutine之後明白,實際上協程也是以函數為運行載體的。只不過相比函數,協程能夠被掛起恢復

協程有什麼優點

協程的優點多是參照線程來比較的:

  • Context switch代價更小。
  • 資源開銷更少。

除此之外,因此協程可以認為切換調度,如果配合上完美的語法,非同步程式寫起來會爽的一逼,具體示例可以參考C#的async/await例子。目前為止似乎協程的應用場景都比較有限,如果自己本身不熟悉協程這個概念的話,你區看某些語法複雜的協程庫寫成的代碼就會覺得的一臉蒙逼(例如C++的Coroutine)。當然重在理解該概念嘛。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、重構簡單的CRUD 1.JDBC工具類 1.因為在crud中都包含一些相同的代碼所以可以提取出來,抽取代碼重構為工具類。 2.將工具類設置為static靜態類,方便調用,不需要new對象。 二、使用預編譯sql語句 1.預編譯sql語句的好處 1.效率高,預編譯對象把一些格式固定的SQL編譯後, ...
  • (一)指針數組 指針數組就是每一個元素存放一個地址,相當於一個指針變數。如:int *p[4]指針數組比較適合用來指向若幹字元串,使得處理字元串更加靈活。例如,現在要將若幹字元串按字母順序由小到大輸出 通過上例子,試比較if(strcmp(name[k],name[j])>0)和if(strcmp( ...
  • 上次通過eclipse在控制台輸出了hello world,是不是有點小激動啊,今天接著介紹Java基礎知識。 一、Java註釋 1、Java註釋語句不會被編譯器運行,不用擔心代碼因為許多註釋語句顯得臃腫而影響程式運行速度。 2、Java註釋有三種寫法。 一是雙斜杠 // 。需要註掉哪一行就添加到哪 ...
  • 1.python模塊:標準庫和第三方庫,第三方庫需要下載安裝2.模塊sys:命令 功能 sys.stdin 標準輸入流sys.stdout 標準輸出流sys.stderr 標準錯誤流 sys.argv[value] 接收命令行的參數。例如,windows下的命令行cmd裡面的參數。其中,argv[0 ...
  • 1. Spring Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開發人員不再需要定義樣板化的配置。通過這種方式,Boot致力於在蓬勃發展的快速應用開發領域(rapid application de ...
  • Using mac os python3.6 to connect ssl will occur urllib.error.URLError. It requires a post-install step, which installs the certifi package of certifi ...
  • 一、Listener監聽器 Javaweb開發中的監聽器,是用於監聽web常見對象 HttpServletRequest HttpSession ServletContext 監聽它們的創建與銷毀、屬性變化 以及session綁定javaBean 1、監聽機制 事件 就是一個事情 事件源 產生這個事 ...
  • 才開始《Spring源碼深度解析》就碰到了問題,按照書上的步驟從github上下載了源碼,然後導入項目後,缺少spring-cglib-repack-3.2.5.jar和spring-objenesis-repack-2.6.jar這兩個jar包。 網上很多解決辦法都是從spring-core中解壓 ...
一周排行
    -Advertisement-
    Play Games
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...