首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

IOCP异步优化

2. IO操作: CPU会把内存中的程序委托给其他的网络、磁盘等驱动程序,让这些外部的驱动程序来进行具体的处理,处理完成以后再返回给内存程序。对于这两类操作的优化方式是不一样的。内存操作的特点是占用CPU资源,CPU不断的计算。对于内存密集型的操作(Compute-Bound Operation)的优化,我们可以把一个大任务拆分成多个互不影响的子任务,那么就能让多个CPU同时参与运算,最后合并子任务的结果,所花的时间自然就少了。所以内存密集型的操作(Compute-Bound Operation)的优化有一个前提:超线程、多核、甚至是真正的多个CPU的计算机能够同时运行多个线程,对于只有一个CPU的计算机不适合。多线程之间的状态切换是需要额外的CPU资源的。IO操作的特点是基本不占用CPU资源,但是它会占用当前的工作者线程,并使其进入等待状态,等待IO完成的处理结果,然后在继续执行。但是在ASP.NET这种天然多线程的环境里,CLR线程池容量是有上限的,这个上限也代表了应用程序最多可以同时执行的请求数量。如果我们CLR线程池的所有线程都进入了IO等待状态,当再有新用户进来,我们的服务就停止响应了。目前我们IO操作的缺点是当前工作者线程同步等待IO,任何IO处理都会霸占一条工作者线程。所以对于IO密集型的操作(IO-Bound Operation)的优化,我们的思路是使用IOCP(I/O Completion Port)。IOCP翻译了中文是IO完成端口,它是一种异步形态,原理是这样的:当前工作者线程在进行IO处理时,委托给某个设备驱动程序,然后自己返回线程池,当IO完成后,OS会通过IOCP提醒CLR它工作已经完成,当CLR接收到通知后,会唤醒一个I/O线程并且运行用户的回调。

01
您找到你想要的搜索结果了吗?
是的
没有找到

疫情下如何让快递积压件全部清零

近期,受疫情影响,快递企业存在用工缺口导致运力不足。连日来,多地快递揽投量开始持续回升为解决运力不足问题,北京市邮政管理局督促各快递企业全国总部加紧调派京外力量驰援各地。 为全力化解现存积压问题,责成各快递企业制定消减积压邮件方案,并制定两天内的具体细化安排,对重点区域,药品、防疫物资等重点物品优先保障投递派送;确保暂时关停的网点即日全部恢复正常运行,对积压严重的分拨中心实施“拔钉子”措施,细分积压快递类型,对投递较为集中的大型社区,通过组织货车运力,由分拨中心直运至社区进行投递,减少网点分拣环节,提高效率。 刚好这两天阳了在家,看到一些网友在发视频调侃自己的快递派送像是龟速前行。所以我做一个通过快递100这个网站查快递物流信息的爬虫。研究了一下,发现实现起来不是很复杂,在此整理成文档并share给大家。 爬取思路也很简单:输入运单号后从服务器获取快递公司对应的ID号,然后拼接出新的请求地址来获取相关信息,代码分解如下:

02

C#中HttpWebRequest的用法详解

HttpWebRequest和HttpWebResponse类是用于发送和接收HTTP数据的最好选择。它们支持一系列有用的属性。这两个类位 于System.Net命名空间,默认情况下这个类对于控制台程序来说是可访问的。请注意,HttpWebRequest对象不是利用new关键字通过构 造函数来创建的,而是利用工厂机制(factory mechanism)通过Create()方法来创建的。另外,你可能预计需要显式地调用一个“Send”方法,实际上不需要。接下来调用 HttpWebRequest.GetResponse()方法返回的是一个HttpWebResponse对象。你可以把HTTP响应的数据流 (stream)绑定到一个StreamReader对象,然后就可以通过ReadToEnd()方法把整个HTTP响应作为一个字符串取回。也可以通过 StreamReader.ReadLine()方法逐行取回HTTP响应的内容。

02

网页抓取类

// --需要引用 using System.Net 以及 using System.IO; private string  GetContentFromUrll( string  _requestUrl)         { string  _StrResponse  = "" ;             HttpWebRequest _WebRequest  =  ( HttpWebRequest )WebRequest.Create( _requestUrl );             _WebRequest.Method  = " GET " ;             WebResponse _WebResponse  =  _WebRequest.GetResponse();             StreamReader _ResponseStream  = new  StreamReader( _WebResponse.GetResponseStream(), System.Text.Encoding.GetEncoding( " gb2312 " ));             _StrResponse  =  _ResponseStream.ReadToEnd();             _WebResponse.Close();              _ResponseStream.Close(); return  _StrResponse;                 }

02
领券