(Translated by https://www.hiragana.jp/)
纖程 - 维基百科,自由的百科全书 とべ转到内容ないよう

纖程

本页使用了标题或全文手工转换
维基百科ひゃっか自由じゆうてき百科ひゃっかぜん

ざい計算けいさん科學かがくなか纖程英語えいご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そう

まいり

[编辑]