纖程

本頁使用了標題或全文手工轉換
維基百科,自由的百科全書

電腦科學中,纖程(英語:Fiber)是一種最輕量化的執行緒(lightweight threads)。它是一種使用者態執行緒(user thread),讓應用程式可以獨立決定自己的執行緒要如何運作。作業系統核心不能看見它,也不會為它進行排程

就像一般的綫程,纖程有自己的定址空間。但是纖程採取合作式多工(Cooperative multitasking),而執行緒採取先佔式多工(Pre-emptive multitasking)。應用程式可以在一個執行緒環境中建立多個纖程,然後手動執行它。纖程不會被自動執行,必須要由應用程式自己指定讓它執行,或換到下一個纖程。

跟執行緒相比,纖程較不需要作業系統的支援。

Windows纖程[編輯]

一個使用者態執行緒拆分成多個纖程,通過使用者態代碼來排程纖程,從而讓各個纖程「非搶占」地工作。相關Windows API:

  • PVOID ConvertThreadToFiber(PVOID pvParam); //把當前執行緒轉換為纖程,系統為纖程執行環境分配大概200位元組的儲存空間,包括:1、由參數pvParam參數指定的使用者定義的值,2、結構化例外處理鏈頭。3、纖程的執行棧的最高和最低位址。4、各種CPU暫存器資訊。
  • PVOID ConvertThreadToFiberEx(PVOID pvParam,DWORD dwFlags);//預設情況下,x86系統的CPU的浮點數狀態資訊在纖程看來不屬於CPU暫存器,因此會導致在纖程中執行一些相關的浮點運算會破壞資料。為了克服這一問題,呼叫本函式並且傳遞FIBER_FLAG_FLOAT_SWITCH給它的第2個參數dwFlags
  • PVOID CreateFiber(DWORD dwStackSize,PFIBER_START_ROUTINE pfnStartAddress,PVOID pvParam); // 在同一個執行緒中再建立一個纖程
  • PVOID CreateFiberEx(SIZE_T dwStackCommitSize,SIZE_T dwStackReserveSize,DWORD dwFlags, PFIBER_START_ROUTINE pStartAddress, PVOID pvParam); // 一個執行緒包含多個纖程
  • VOID WINAPI FiberFunc(PVOID pvParam);//纖程函式的規格
  • VOID SwitchToFiber(PVOID pvFiberExecutionContext);//排程纖程的執行。參數是ConverThreadToFiber(Ex)或CreateFiber(Ex)返回值。
  • VOID DeleteFiber(PVOID pvFiberExecutionContext);//纖程完成了任務,刪除它. 該函式首先清除纖程執行棧,然後刪除纖程執行環境。一般是由一個纖程呼叫來刪除另一個纖程。
  • ConvertFiberToThread //當所有纖程結束了執行,需要從纖程轉換為執行緒
  • IsThreadAFiber //是否正在一個纖程執行環境中執行
  • PVOID GetCurrentFiber();// 正在執行的纖程的執行環境
  • PVOID GetFiberData();//使用者定義的一個資料,這個資料由CreateFiber(Ex)或ConvertThreadToFiber(Ex)的pvParam參數指定
  • 纖程局部儲存(FLS)機制。這個機制和「執行緒局部儲存」(TLS)類似
    • FlsAlloc函式分配FLS槽來存放資料,這個FLS槽可以被當前行程內所有纖程共同使用
    • FlsSetValue函式來儲存資料到FLS槽中
    • FlsGetValue函式來取得FLS槽中對應的資料
    • FlsFree來釋放FLS槽

參見[編輯]