异步编程.ppt

上传人:hyn****60 文档编号:88384578 上传时间:2023-04-25 格式:PPT 页数:21 大小:415.50KB
返回 下载 相关 举报
异步编程.ppt_第1页
第1页 / 共21页
异步编程.ppt_第2页
第2页 / 共21页
点击查看更多>>
资源描述

《异步编程.ppt》由会员分享,可在线阅读,更多相关《异步编程.ppt(21页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、Asynchronous Programming ModelShiding LinNon-blocking,blockingOverlapped IO,IO completion portAsynchronous,synchronousThreadingEvent-driven programmingConceptsBlockingSame control flowReturn when readyNon-blockingInstant returnStatus checking by poll,select,epollBlocking&non-blockingread()read()chec

2、k readyreadyblockedIOCPInstant returnNotification from kernel when completedCallback functionSynchronization objectsCompletion event(to IO Completion Port)Overlapped IO&IO completion portread()I/OnotifynotificationWorker threadsWhy asynchronous?Concurrent requestsMulti-party communicationMultiple de

3、vices(NICs,disks)Synchronous+multi-threadingBetter performance for user-level context switchAsynchronous&synchronousThreadVirtual processorTime-multiplexingAdvantagesSimple and IntuitiveDisadvantagesLockContext-switch costBad scalability(ctx StartA(ctx,EndA);EndA:a-ctx StartB(ctx,EndB);EndB:StartC(c

4、tx,EndC);EndC:Manual stack managementChopped control flowa=A(f)b=B(a)c=C(b)Two phase commitEvent-driven programmingCoordinatorSubordinateLog(”Prepare”)PrepareCollect all acksCommitLog(”Ready”)Prepare_AckCommit_AckLog(”Commit”)Log(”Commit”)Collect all acksNon-lockLight-weight context switchGood scala

5、bilityChopped control flowManual stack managementOnly logical parallelismPros and consProgramming frameworkEvent-drivenAsynchronous IOMulti-processor supportKylinKylin architectureCExecManCDiskManCNetManreq.Qdisksthreadevent Qobjectsthreadevent Qobjectsthreadevent Qobjectsconnections req.Qstruct Asy

6、ncContext Job job;APF_ERROR nErrCode;int nAction;CAsyncClient*pClient;class CAsyncClientprotected:virtual void OnCompletion(AsyncContext*pCtx)=0;public:int GetAsyncId();virtual int AddRef();virtual int Release();virtual const char*GetName();void SetName(const char*fmt,.);Interfacesstruct NetRequest

7、AsyncContext async;void*buf;int len;int request;int xfered;class CSocketV:public CAsyncClientprotected:virtual void OnCompletion(AsyncContext*pContext);virtual bool OnConnected(APF_ERROR nErrCode);virtual void OnListened(SOCKET s,SOCKADDR_IN*pSockAddrIn);virtual void OnWritten(APF_ERROR nErrCode,Net

8、Request*pReq)virtual void OnRead(APF_ERROR nErrCode,NetRequest*pReq)virtual void OnBroken(APF_ERROR nErrCode)=0;bool Close();public:APF_ERROR Create(bool bTCP,uint16 port=0,uint32 ip=0);void Listen(int backlog=64);void Connect(uint32 ip,uint16 port);void Shutdown();void Read(void*pBuf,int count,NetR

9、equest*pReq);void Write(void*pBuf,int count,NetRequest*pReq);Interfacesclass CFIFOChannel:public CSocket;void CFIFOChannel:OnRead(APF_ERROR nErrCode,NetRequest*pReq)if(0=nErrCode)add pReq-buf to buffer queue:m_ReadQOnRead();void CFifoChannel:OnRead()char*p,buf32;for(;)switch(m_frt)case FRT_PACK_BEGI

10、N:if(m_ReadQ.GetTotalLen()=20)m_ReadQ.GetN(20,buf);if(buf19=0)p=buf+6;m_nHead=strtoul(p,&p,10);if(m_nHead!=0)while(IS_BLANK(*p)p+;m_nBody=strtoul(p,NULL,10);m_frt=FRT_HEADER;break;m_frt=FRT_STOP;break;StartRead();return;case Sample 1:FIFOBUF!x y 0headrnrnbodyEOF!Sample 2:Block cache managercachereadwritefreeDiskMandisksevent Qreq.Qpackcheckenqevent QclientackackcallESPKylinESPSSDBSSDB-ClientsimulationnetworkingThank you!

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com