当前位置:首页 > 数码 > 全面比照与了解-纤程与协程的区别 (全面比照与了解的区别)

全面比照与了解-纤程与协程的区别 (全面比照与了解的区别)

admin5个月前 (04-30)数码13

纤程(Fiber)是操作系统提供的概念。那什么是纤程呢?

纤程是一种比线程更轻量级的口头单元,它可以在一个线程中切换口头,不须要操作系统内核的干预。纤程可以用来成功异步义务,防止了创立新线程的开支。纤程也叫做协程(coroutine),是一种用户态的多义务机制。

协程与纤程关键的区别点:

一个便捷的纤程程序,创立两个纤程并在它们之间切换:

#include"pch.h"#include<tream>#include<windows.h>#include<tchar.h>#defineFIBER_COUNT2LPVOIDg_lpFiber[FIBER_COUNT]={};VOIDWINAPIFiberFun(LPVOIDpParam)//纤程函数的前往类型为VOID,并不是由于前往值没无心义,而是由于这个函数不应该前往!{intnFiberIndex=(int)pParam;while(true){std::cout<<"Fiber"<<nFiberIndex<<std::endl;SwitchToFiber(g_lpFiber[1-nFiberIndex]);//切换到另一个纤程}}int_tmn(intargc,_TCHAR*argv[]){LPVOIDlpMainFiber=ConvertThreadToFiber(NULL);//将以后线程转换为主纤程if(lpMainFiber==NULL){std::cout<<"ConvertThreadToFiberfailed"<<std::endl;return-1;}for(inti=0;i<FIBER_COUNT;i++){g_lpFiber[i]=CreateFiber(0,FiberFun,(LPVOID)i);//创立子纤程if(g_lpFiber[i]==NULL){std::cout<<"CreateFiberfailed"<<std::endl;return-1;}}SwitchToFiber(g_lpFiber[0]);//切换到第一个子纤程for(inti=0;i<FIBER_COUNT;i++){DeleteFiber(g_lpFiber[i]);//删除子纤程}ConvertFiberToThread();//将主纤程转换回线程return0;}

一个经常使用纤程成功协同程序的例子:

#include<windows.h>#include<stdio.h>#defineMAX_FIBERS3DdwCounter;voidWINAPIMyFunc(LPVOIDlpParameter){DWORDdwIndex;dwIndex=*(DWORD*)lpParameter;while(TRUE){printf("dwCounter=%d,dwIndex=%dn",dwCounter,dwIndex);dwCounter++;SwitchToFiber(lpParameter);}}voidmain(){LPVOIDlpMainAddress;LPVOIDlpAddress[MAX_FIBERS];DWORDdwParameter[MAX_FIBERS];inti;lpMainAddress=ConvertThreadToFiber(NULL);for(i=0;i<MAX_FIBERS;i++){dwParameter[i]=i+1;lpAddress[i]=CreateFiber(0,(LPFIBER_START_ROUTINE)MyFunc,&dwParameter[i]);}for(i=0;i<10;i++)SwitchToFibers(lpAddress[i%MAX_FIBERS]);for(i=0;i<MAX_FIBERS;i++)DeleteFibers(lpAddress[i]);printf("endn");}

虽然协程的概念早于线程,但协程的成功并不是一切操作系统原生允许的。目前,很多编程言语都是经过自己的运转时环境来模拟协程,应用线程技术来成功协程的调度。这些言语中,像golang这样的言语在成功上比拟成熟,可以允许少量的协程同时口头,这也是golang能够处置高并发的要素之一。

在golang中,协程的成功是基于线程的,它保养了一个协程队列,由多个线程来担任口头协程队列中的义务。当一个协程在口头环节中遇到了阻塞操作,比如期待IO数据前往,它会被放入一个阻塞队列中,期待IO数据前往后再继续口头。在这个环节中,以后线程会去口头队列中的其余协程,从而成功协程之间的切换。


携程,是什么意思?

携手同行,一起启程

纤程与协程的区别

后端开发需要学什么

后端开发需要学习的内容有编程语言的相关知识,例如Java、PHP语言等;数据库的相关知识,后端开发一定离开不了数据库的支持,它是用于保存数据信息的库;常用于开发框架的相关知识,框架为我们的开发提高了大量的方法封装;http协议的相关知识。

编程语言学习

对于初学者来说,Java入门是一个不错的选择。它是一门面向对象的编程语言,除了学习它的基本语法以外,我们还需要了解封装,继承,多态等特性,因为后面所学的框架中的技术都依赖于它。所以在学习Java时一定要打好基础。

数据库

做后端开发一定离开不了数据库的支持,它是用于保存数据信息的库。我们可以将数据库看成是Excel中的数据表,数据库中的每一个table就类似于Excel中的sheet,db就是每一个Excel文件,而sql语句就是一条条指令,可以帮助我们操作里面的数据。对于数据库的学习,mysql数据库最适合入门。

框架学习

框架为我们开发提高了大量的方法封装,我们可以直接调用它来解决问题,大大提高了开发效率。同时框架可以帮助我们分层编写代码利于后期维护。另外它还可以做一些安全防护,保护我们的数据安全。

http协议

浏览器与服务器通过http协议交互,其实就是相互之间传递一串特定格式的字符串。get参数,post参数,url,和cookie等信息其实都包含在这字符串里面。所以说http协议是一个重要的存在,也是我们学习后端开发一个必不可少的要点。

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: 纤程