- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
详细说明原始线程是一种轻量级的无需堆栈的线程它主要用于
详细说明:“原始线程”是一种轻量级的、无需堆栈的线程。它主要用于内存极为受限的系统,如深入嵌入式系统、传感器网络等。“原始线程”是以C代码实现的,为事件驱动的系统提供了线性的代码执行空间。“原始线程”即可以用在有实时操作系统的系统中,也可以用在没有实时操作系统的系统中。它在事件驱动的系统上层提供了阻塞上下文,省去了每个线程的单独堆栈空间开销。原始线程的目标是在没有复杂的状态机或多线程的情况下实现控制顺序流。原始线程在C语言内部实现了条件阻塞。原始线程相对于纯事件驱动方法的优势是原始线程提供了可以阻塞函数的顺序代码结构。在纯事件驱动的方法中,阻塞的实现必须将一个函数手动分成两个部分。一部分放在阻塞调用前,一部分放在阻塞调用后。这让使用if()和while()语句变得困难。原始线程相对于普通线程的优势是,它不需要为每个线程分配堆栈。在内存受限的系统中,为每个线程分配堆栈空间会占用大量的内存。相比而言,原始线程的每个线程只需2到12个字节的状态字,具体多大与构架有关。注意:由于原始线程有阻塞调用中中不需保存堆栈上下文,原始线程阻塞时,局部变量也不再保留。这意味着局部变量的使用必须十分小心。如果不确定的话,尽量不要有原始线程中使用局部变量。主要特性:
无机器相关代码-代码完成是C写的。
不使用错误-倾向于像longjump()这样的函数。
很小的RAM开销-每条线程仅两个字节。
即可使用OS,也可以不使用。
提供阻塞等待而无需多线程或堆栈切换。
主要应用:
内存受限系统
事件驱动的协议栈
深入嵌入式系统
传感器网络
原始线程包括四个基本的操作:初妈化(PT_INIT()),执行(PT_BEGIN()),条件阻塞(PT_WAIT_UNTIL()),和退出(PT_EXIT()).在此之上还有两个方便使用的函数:反向条件阻塞(PT_WAIT_WHILE())和原始线程阻塞(PT_WAIT_THREAD()).见:uIP中文文档第五 原始套接字原始线程线的分布是基于一个类似于BSD的协议的。也就是说允许商业的和非商业的使用。唯的需要是credit is given.原始线程:原始线程是极端轻量级的、无需堆栈的线程。它在事件驱动的系统上层提供阻塞上下文,无需为每个线程提供堆栈的开销。原始线程的目标是在没有复杂的状态机或多线程的情况下实现控制顺序流。原始线程在C函数内部实现了条件阻塞。在内存受限的系统中,如深入嵌入式系统,传统的多线程的内存开销可能会显得过大。在传统线程中每条线程都需要自己堆栈,这种要求并非必要的。堆栈空间可能花去大部分的内存空间。原始线程相对于多线程的优势在于原始线程是相当轻量极的,原始线程不需要自己的堆栈。相反,所有的线程都运行在同一个堆栈中,上下文的切换是通过堆栈的回转实现的。这在内存受限的系统中是具有优势的,因为那里一个线程的堆栈可能就占用了很大的一部分内存。原始线程的每条线程只需两字节,而且原始线程是纯用C实现的,不需要任何机器有关的汇编语言代码。一个原始线程在一个C语言函数中运行,不能跨过多个函数。原始线程可以调用普通的C语言函数,在调用的C语言函数不能阻塞。嵌套调用的函数内部的阻塞是通过为可以阻塞的函数产生一人新的线程来实现的。这种方法的优点是阻塞是明确的,程序员确切的知道哪些函数是可以阻塞的,哪些函数是永远也不会阻塞的。原始线程与不对称的协同程是相似的,主要的不同在于协同程序为每个协同程序使用单独的堆栈而原始线程无需堆栈。与原始线程最相似的机制是Python产生器。这些产生器也是无堆栈的结构,但用途不同。原始线程在C函数内部实现阻塞上下文,而python产生器从产生函数中提供了多个退出点。局部变量:注意:由于原始线程有阻塞调用中中不需保存堆栈上下文,原始线程阻塞时,局部变量也不再保留。这意味着局部变量的使用必须十分小心。如果不确定的话,尽量不要有原始线程中使用局部变量。调度:原始线程是通过重复调用宿主函数驱动的。每调用宿主函数一次,原始线程都会运行到阻塞或退出为止。这样说来,原始线程的高度是由使用原始线程的应用做到的。实现:原始线程的实现采用了local continuation机制.local continuation代表的是一个程序在某个位置的当前执行状态,但不提供任何调用历史或局部变量.local continuation可以在指定函数内设定,以捕获程序的状态.local continuation设定后可以恢复,以复原local continuation设定时函数的状态.local continuation的实现的多种方法:1. 使用机器相关的汇编语言2. 使用标准C结构体.3.使用编译器扩展.第一种方式通过保存和恢复处理器状态实现,所说的处理器
文档评论(0)