Windows 纤程详解

在Windows2000/XP中,纤程(fiber)相当于用户级别的线程或轻进程.纤程由Win32库函数支持,对核心是不可见的.纤程可以通过SwitchToFiber显示至另一合作纤程,以实现合作纤程之间的协同.

纤程包含独立的目态栈,寄存器状态的控制信息.目态控制的纤程转接要求较高的编程经验.由于纤程属于目态对象,一个纤程被封锁意味着所在线程被封锁.应用程序可以通过ConvertThreadToFiber将线程转换为纤程.与线程对比,纤程具有切换速度快的特点.

Microsoft公司给Windows添加了一种纤程,以便能够非常容易地将现有的UNIX服务器应用程序移植到Windows中。UNIX服务器应用程序属于单线程应用程序(由Windows定义),但是它能够为多个客户程序提供服务。换句话说, UNIX应用程序的开发人员已经创建了他们自己的线程结构库,他们能够使用这种线程结构库来仿真纯线程。该线程包能够创建多个堆栈,保存某些C P U寄存器,并且在它们之间进行切换,以便为客户机请求提供服务。

  显然,若要取得最佳的性能,这些UNIX应用程序必须重新设计,仿真的线程库应该用Windows提供的纯线程来替代。然而,这种重新设计需要花费数月甚至更长的时间才能完成,因此许多公司首先将它们现有的UNIX代码移植到Windows中,这样就能够将某些应用软件推向Windows市场。

  使用纤程

  线程是在Windows内核中实现的,纤程是在用户模式下实现的,内核对纤程一无所知,内核会根据我们定义的算法来对纤程进行调度。

  一个线程可以包含一个或多个纤程。

  转化线程为纤程

  使用纤程的第一个步骤是将已有的线程转换为一个纤程。ConvertThreadToFiber这个函数会为纤程的上下文分配内存,这个上下文的构成是:

  # 一个用户自定义的值

  # 结构化异常处理链的头

  # 纤程栈的顶部和底部的内存地址

  # 某些CPU寄存器,其中包括栈指针、指令指针以及其他寄存器

  当我们分配了纤程执行上下文并对其进行初始化之后,还必须将执行上下文的地址与线程关联起来。这样我们就将线程转换成了一个纤程,该纤程在这个线程中执行。

  其实,除非我们打算创建更多的纤程,并让它们在同一个线程中运行,否则没有理由将一个线程转换为纤程。

  CreateFiber:创建一个纤程

  SwitchToFiber:调用一个纤程(同一个线程中,同一时刻只能执行一个纤程)

  DeleteFiber:通常为一个纤程调用,来删除另一个纤程

  GetCurrentFiber:得到当前正在运行的纤程

Windows 纤程详解相关推荐

  1. Windows API函数大全---附:windows运行命令详解

    1. API之网络函数             WNetAddConnection 创建同一个网络资源的永久性连接             WNetAddConnection2 创建同一个网络资源的连 ...

  2. python协程详解_python协程详解

    原博文 2019-10-25 10:07 − # python协程详解 ![python协程详解](https://pic2.zhimg.com/50/v2-9f3e2152b616e89fbad86 ...

  3. Windows权限设置详解

    Windows权限设置详解 随着动网论坛的广泛应用和动网上传漏洞的被发现以及SQL注入式***越来越多的被使用,WEBSHELL让防火墙形同虚设,一台即使打了所有微软补丁.只让80端口对外开放的WEB ...

  4. python协程详解

    目录 python协程详解 一.什么是协程 二.了解协程的过程 1.yield工作原理 2.预激协程的装饰器 3.终止协程和异常处理 4.让协程返回值 5.yield from的使用 6.yield ...

  5. Windows XP服务详解

      Windows XP服务详解 微软的个人操作系统从Win98发展到WinXP,为什么突然变得那么消耗系统资源呢?以至于很多人都感觉WinXP只是高配置的电脑才能运行的操作系统,其实不然.WinXP ...

  6. 技术资料收藏:Windows系统文件中文详解

    技术资料收藏:Windows系统文件中文详解 A ↑ ACCESS.CHM - Windows帮助文件 ACCSTAT.EXE - 辅助状态指示器 ADVAPI32.DLL - 高级Win32应用程序 ...

  7. 优化Windows XP虚拟内存详解(转)

    优化Windows XP虚拟内存详解(转)[@more@] 什么是虚拟内存? 虚拟内存是Windows XP为作为内存使用的一部分硬盘空间.即便物理内存很大,虚拟内存也是必不可少的.虚拟内存在硬盘上其 ...

  8. 计算机代码 w6,蓝魔w6hd的参数介绍和刷机教程详解【图解】

    手机和电脑的逐渐普及,让人们已经逐渐的习惯数码产品的存在,但是随着时间的推移,人们对于数码产品的要求也越来越高.手机虽然方便,但是毕竟它的功能还是没有电脑强大,而且屏幕还很小.电脑虽然功能强大,但是携 ...

  9. 《Windows系统文件名详解(上)》

    WINDOWS应用 UNIX|LINUX office软件 其他内容 维修实例 其他 photoshop CorelDraw AutoCAD 其他 程序语言类 数据库类 网站建设 互联网应用 网络安全 ...

最新文章

  1. 帝国CMS列表分页样式(三)[!--show.listpage--]
  2. 16进制颜色透明_PPT | 如何快速提取图片颜色之人生太卷
  3. 畅通工程,How Many Tables ACM第九天-图论
  4. linux下软件的基本安装和卸载 法一
  5. 小波变换(wavelet transform)的通俗解释(三)
  6. 9ztu.com 就找图商品图片商品条码搜索引擎
  7. 液晶显示器模拟接口时,屏幕重影照片
  8. 《博弈论》— 人生何处不博弈
  9. js-ramda-介绍和对比lodash及补集库
  10. python批量ppt转图片,pdf转图片,word转图片脚本
  11. CVTE面试总结(全网面经,已收offer)
  12. Typora崩溃 与 设置备份
  13. BIM轻量化技术解析
  14. Ubuntu设置仅允许特定用户或特定IP通过ssh访问
  15. 500G 史上最全的JAVA全套教学视频网盘
  16. 解决XWPFRun的addPicture方法无法显示图片的问题
  17. Appscan工具的使用
  18. sd和sem啥区别_标准差和标准误的选择 (SD) 和 (SEM)
  19. Win7系统删除网络驱动器盘符
  20. 《疯狂Java讲义》读书笔记3

热门文章

  1. elasticsearch基础3——聚合、补全、集群
  2. ElasticSearch查询地图信息(geo-point类型)
  3. 第一台计算机是怎么输出,世界上第一台计算机是如何诞生的?
  4. Building A New Barn
  5. linux+格式化磁盘格式化,Linux下的磁盘格式化
  6. nginx安装crt证书
  7. 【摘】WebGIS开发从入门到......
  8. 上传文件计算机传输的,文件全能王怎么把文件传到电脑上 文件全能王文件上传到电脑教程...
  9. 系统管理员的3大黄金法则
  10. 网络舆情分析技术 读书笔记1