fbpx
维基百科

纖程

計算機科學中,纖程(英語: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槽

参见 编辑

纖程, 本條目存在以下問題, 請協助改善本條目或在討論頁針對議題發表看法, 此條目需要擴充, 2011年9月17日, 请協助改善这篇條目, 更進一步的信息可能會在討論頁或扩充请求中找到, 请在擴充條目後將此模板移除, 此條目没有列出任何参考或来源, 2011年9月17日, 維基百科所有的內容都應該可供查證, 请协助補充可靠来源以改善这篇条目, 无法查证的內容可能會因為異議提出而被移除, 此條目需要精通或熟悉相关主题的编者参与及协助编辑, 2011年9月17日, 請邀請適合的人士改善本条目, 更多的細節與詳情請參见討. 本條目存在以下問題 請協助改善本條目或在討論頁針對議題發表看法 此條目需要擴充 2011年9月17日 请協助改善这篇條目 更進一步的信息可能會在討論頁或扩充请求中找到 请在擴充條目後將此模板移除 此條目没有列出任何参考或来源 2011年9月17日 維基百科所有的內容都應該可供查證 请协助補充可靠来源以改善这篇条目 无法查证的內容可能會因為異議提出而被移除 此條目需要精通或熟悉相关主题的编者参与及协助编辑 2011年9月17日 請邀請適合的人士改善本条目 更多的細節與詳情請參见討論頁 在計算機科學中 纖程 英語 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槽参见 编辑绿色线程 GNU可移植线程库 取自 https zh wikipedia org w index php title 纖程 amp oldid 54610633, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。