谷歌SEO

谷歌SEO

Products

当前位置:首页 > 谷歌SEO >

惠州市网站开发公司为何需要建设自己的网站?

96SEO 2026-02-20 09:56 0


3、完成端口Completion

摘要开发网络程序从来都不是一件容易的事情尽管只需要遵守很少的一些规则;创建socket,发起连接接受连接发送和接受数据。

惠州市网站开发公司为何需要建设自己的网站?

真正的困难

让你的程序可以适应从单单一个连接到几千个连接乃至于上万个连接。

利用Windows平台完成端口进行重叠I/O的技术和Linux在2.6版本的内核中

引入的EPOll技术可以很方便在在在Windows和Linux平台上开发出支持大量连接的网络服务程序。

本文介绍在Windows和Linux平台

上使用的完成端口和EPoll模型开发的基本原理同时给出实际的例子。

本文主要关注C/S结构的服务器端程序因为一般来说开发一个大容量具可扩展

1、基本概念

设备---windows操作系统上允许通信的任何东西比如文件、目录、串行口、并行口、邮件槽、命名管道、无名管道、套接字、控制台、逻辑磁盘、物理

磁盘等。

绝大多数与设备打交道的函数都是CreateFile/ReadFile/WriteFile等。

所以我们不能看到**File函数就只想到文件

设备。

与设备通信有两种方式同步方式和异步方式。

同步方式下当调用ReadFile函数时函数会等待系统执行完所要求的工作然后才返回异步方式

下ReadFile这类函数会直接返回系统自己去完成对设备的操作然后以某种方式通知完成操作。

重叠I/O----顾名思义当你调用了某个函数比如ReadFile就立刻返回做自己的其他动作的时候同时系统也在对I/0设备进行你要求的操

作在这段时间内你的程序和系统的内部动作是重叠的因此有更好的性能。

所以重叠I/O是用于异步方式下使用I/O设备的。

重叠I/O需要使用的一个非常重要的数据结构OVERLAPPED。

I/O)机制允许发起一个操作然后在操作完成之后接受到信息。

对于那种需要很长时间才能完成的操作来说重叠IO机制尤其有用因为发起重叠操作的线程

在重叠请求发出后就可以自由的做别的事情了。

在WinNT和Win2000上提供的真正的可扩展的I/O模型就是使用完成端口Completion

Port的重叠I/O.完成端口---是一种WINDOWS内核对象。

完成端口用于异步方式的重叠I/0情况下当然重叠I/O不一定非使用完成端口不

可还有设备内核对象、事件对象、告警I/0等。

但是完成端口内部提供了线程池的管理可以避免反复创建线程的开销同时可以根据CPU的个数灵活的决定

线程个数而且可以让减少线程调度的次数从而提高性能其实类似于WSAAsyncSelect和select函数的机制更容易兼容Unix但是难以实现

我们想要的“扩展性”。

而且windows的完成端口机制在操作系统内部已经作了优化提供了更高的效率。

所以我们选择完成端口开始我们的服务器程序的

1、发起操作不一定完成系统会在完成的时候通知你通过用户在完成端口上的等待处理操作的结果。

所以要有检查完成端口取操作结果的线程。

在完成端口

上守候的线程系统有优化除非在执行的线程阻塞不会有新的线程被激活以此来减少线程切换造成的性能代价。

所以如果程序中没有太多的阻塞操作没有必要

2、操作与相关数据的绑定方式在提交数据的时候用户对数据打相应的标记记录操作的类型在用户处理操作结果的时候通过检查自己打的标记和系统的操作结果进行相应的处理。

3、操作返回的方式:一般操作完成后要通知程序进行后续处理。

但写操作可以不通知用户此时如果用户写操作不能马上完成写操作的相关数据会被暂存到到非

交换缓冲区中在操作完成的时候系统会自动释放缓冲区。

此时发起完写操作使用的内存就可以释放了。

此时如果占用非交换缓冲太多会使系统停止响应。

3、完成端口Completion

其实可以把完成端口看成系统维护的一个队列操作系统把重叠IO操作完成的事件通知放到该队列里由于是暴露

“操作完成”的事件通知所以命名为“完成端口”COmpletion

Ports。

一个socket被创建后可以在任何时刻和一个完成端口联系起来。

typedef

Offset;//和OffsetHigh合成一个64位的整数用来表示从文件头部的多少字节开始

DWORD

OffsetHigh;//操作如果不是对文件I/O来操作则必须设定为0

PVOID

hEvent;//如果不使用就务必设为0,否则请赋一个有效的Event句柄

OVERLAPPED,

ReadFile(hFile,buffer,sizeof(buffer),dwNumBytesRead,Overlapped);

这样就完成了异步方式读文件的操作然后ReadFile函数返回由操作系统做自己的事情下面介绍几个与OVERLAPPED结构相关的函数

BOOL

//TRUE只有当操作完成才返回FALSE直接返回如果操作没有完成通过调//用GetLastError

宏HasOverlappedIoCompleted可以帮助我们测试重叠I/0操作是否完成该宏对OVERLAPPED结构的Internal成员进行了测试查看是否等于STATUS_PENDING值。

一般来说一个应用程序可以创建多个工作线程来处理完成端口上的通知事件。

工作线程的数量依赖于程序的具体需要。

但是在理想的情况下应该对应一个

CPU

创建一个线程。

因为在完成端口理想模型中每个线程都可以从系统获得一个“原子”性的时间片轮番运行并检查完成端口线程的切换是额外的开销。

在实际开

发的时候还要考虑这些线程是否牵涉到其他堵塞操作的情况。

如果某线程进行堵塞操作系统则将其挂起让别的线程获得运行时间。

因此如果有这样的情况

应用完成端口

创建完成端口完成端口是一个内核对象使用时他总是要和至少一个有效的设备句柄进行关联完成端口是一个复杂的内核对象创建它的函数是

HANDLE

CreateIoCompletionPort(INVALID_HANDLE_VALUE,NULL,NULL,dwNumberOfThreads);

第二步将刚创建的完成端口和一个有效的设备句柄关联起来可以使用下面的函数

bool

AssicoateDeviceWithCompletionPort(HANDLE

hCompPort,HANDLE

hCreateIoCompletionPort(hDevice,hCompPort,dwCompKey,0);

return

CreateIoCompletionPort函数也可以一次性的既创建完成端口对象又关联到一个有效的设备句柄

CompletionKey是一个可以自己定义的参数我们可以把一个结构的地址赋给它然后在合适的时候取出来使用最好要保证结构里面的内存不是分配在栈上除非你有十分的把握内存会保留到你要使用的那一刻。

NumberOfConcurrentThreads通常用来指定要允许同时运行的的线程的最大个数。

通常我们指定为0这样系统会根据CPU的个数来自

动确定。

创建和关联的动作完成后系统会将完成端口关联的设备句柄、完成键作为一条纪录加入到这个完成端口的设备列表中。

如果你有多个完成端口就会有多

完成端口可以帮助我们管理线程池但是线程池中的线程需要我们使用_beginthreadex来创建凭什么通知完成端口管理我们的新线程呢答案在函数GetQueuedCompletionStatus。

该函数原型

BOOL

这个函数试图从指定的完成端口的I/0完成队列中抽取纪录。

只有当重叠I/O动作完成的时候完成队列中才有纪录。

凡是调用这个函数的线程将被放入到完成

端口的等待线程队列中因此完成端口就可以在自己的线程池中帮助我们维护这个线程。

完成端口的I/0完成队列中存放了当重叠I/0完成的结果----

一条纪录该纪录拥有四个字段前三项就对应GetQueuedCompletionStatus函数的2、3、4参数最后一个字段是错误信息

dwError。

我们也可以通过调用PostQueudCompletionStatus模拟完成了一个重叠I/0操作。

当I/0完成队列中出现了纪录完成端口将会检查等待线程队列该队列中的线程都是通过调用GetQueuedCompletionStatus函数使自

己加入队列的。

等待线程队列很简单只是保存了这些线程的ID。

完成端口会按照后进先出的原则将一个线程队列的ID放入到释放线程列表中同时该线程将从

等待GetQueuedCompletionStatus函数返回的睡眠状态中变为可调度状态等待CPU的调度。

所以我们的线程要想成为完成端口管理的线

程就必须要调用GetQueuedCompletionStatus函数。

出于性能的优化实际上完成端口还维护了一个暂停线程列表具体细节可以参考

完成端口线程间数据传递线程间传递数据最常用的办法是在_beginthreadex函数中将参数传递给线程函数或者使用全局变量。

但是完成端口还有自

己的传递数据的方法答案就在于CompletionKey和OVERLAPPED参数。

CompletionKey被保存在完成端口的设备表中是和设备句柄一一对应的我们可以将与设备句柄相关的数据保存到CompletionKey中

或者将CompletionKey表示为结构指针这样就可以传递更加丰富的内容。

这些内容只能在一开始关联完成端口和设备句柄的时候做因此不能在以后

OVERLAPPED参数是在每次调用ReadFile这样的支持重叠I/0的函数时传递给完成端口的。

我们可以看到如果我们不是对文件设备做操作该

结构的成员变量就对我们几乎毫无作用。

我们需要附加信息可以创建自己的结构然后将OVERLAPPED结构变量作为我们结构变量的第一个成员然后传

递第一个成员变量的地址给ReadFile函数。

因为类型匹配当然可以通过编译。

当GetQueuedCompletionStatus函数返回时我

们可以获取到第一个成员变量的地址然后一个简单的强制转换我们就可以把它当作完整的自定义结构的指针使用这样就可以传递很多附加的数据了。

太好了

只有一点要注意如果跨线程传递请注意将数据分配到堆上并且接收端应该将数据用完后释放。

我们通常需要将ReadFile这样的异步函数的所需要的缓

冲区放到我们自定义的结构中这样当GetQueuedCompletionStatus被返回时我们的自定义结构的缓冲区变量中就存放了I/0操作的

数据。

CompletionKey和OVERLAPPED参数都可以通过GetQueuedCompletionStatus函数获得。

while

GetQueuedCompletionStatus(...);

......

那么如何退出呢答案就在于上面曾提到的PostQueudCompletionStatus函数我们可以用它发送一个自定义的包含了OVERLAPPED成员变量的结构地址里面包含一个状态变量当状态变量为退出标志时线程就执行清除动作然后退出。



SEO优化服务概述

作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。

百度官方合作伙伴 白帽SEO技术 数据驱动优化 效果长期稳定

SEO优化核心服务

网站技术SEO

  • 网站结构优化 - 提升网站爬虫可访问性
  • 页面速度优化 - 缩短加载时间,提高用户体验
  • 移动端适配 - 确保移动设备友好性
  • HTTPS安全协议 - 提升网站安全性与信任度
  • 结构化数据标记 - 增强搜索结果显示效果

内容优化服务

  • 关键词研究与布局 - 精准定位目标关键词
  • 高质量内容创作 - 原创、专业、有价值的内容
  • Meta标签优化 - 提升点击率和相关性
  • 内容更新策略 - 保持网站内容新鲜度
  • 多媒体内容优化 - 图片、视频SEO优化

外链建设策略

  • 高质量外链获取 - 权威网站链接建设
  • 品牌提及监控 - 追踪品牌在线曝光
  • 行业目录提交 - 提升网站基础权威
  • 社交媒体整合 - 增强内容传播力
  • 链接质量分析 - 避免低质量链接风险

SEO服务方案对比

服务项目 基础套餐 标准套餐 高级定制
关键词优化数量 10-20个核心词 30-50个核心词+长尾词 80-150个全方位覆盖
内容优化 基础页面优化 全站内容优化+每月5篇原创 个性化内容策略+每月15篇原创
技术SEO 基本技术检查 全面技术优化+移动适配 深度技术重构+性能优化
外链建设 每月5-10条 每月20-30条高质量外链 每月50+条多渠道外链
数据报告 月度基础报告 双周详细报告+分析 每周深度报告+策略调整
效果保障 3-6个月见效 2-4个月见效 1-3个月快速见效

SEO优化实施流程

我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:

1

网站诊断分析

全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。

2

关键词策略制定

基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。

3

技术优化实施

解决网站技术问题,优化网站结构,提升页面速度和移动端体验。

4

内容优化建设

创作高质量原创内容,优化现有页面,建立内容更新机制。

5

外链建设推广

获取高质量外部链接,建立品牌在线影响力,提升网站权威度。

6

数据监控调整

持续监控排名、流量和转化数据,根据效果调整优化策略。

SEO优化常见问题

SEO优化一般需要多长时间才能看到效果?
SEO是一个渐进的过程,通常需要3-6个月才能看到明显效果。具体时间取决于网站现状、竞争程度和优化强度。我们的标准套餐一般在2-4个月内开始显现效果,高级定制方案可能在1-3个月内就能看到初步成果。
你们使用白帽SEO技术还是黑帽技术?
我们始终坚持使用白帽SEO技术,遵循搜索引擎的官方指南。我们的优化策略注重长期效果和可持续性,绝不使用任何可能导致网站被惩罚的违规手段。作为百度官方合作伙伴,我们承诺提供安全、合规的SEO服务。
SEO优化后效果能持续多久?
通过我们的白帽SEO策略获得的排名和流量具有长期稳定性。一旦网站达到理想排名,只需适当的维护和更新,效果可以持续数年。我们提供优化后维护服务,确保您的网站长期保持竞争优势。
你们提供SEO优化效果保障吗?
我们提供基于数据的SEO效果承诺。根据服务套餐不同,我们承诺在约定时间内将核心关键词优化到指定排名位置,或实现约定的自然流量增长目标。所有承诺都会在服务合同中明确约定,并提供详细的KPI衡量标准。

SEO优化效果数据

基于我们服务的客户数据统计,平均优化效果如下:

+85%
自然搜索流量提升
+120%
关键词排名数量
+60%
网站转化率提升
3-6月
平均见效周期

行业案例 - 制造业

  • 优化前:日均自然流量120,核心词无排名
  • 优化6个月后:日均自然流量950,15个核心词首页排名
  • 效果提升:流量增长692%,询盘量增加320%

行业案例 - 电商

  • 优化前:月均自然订单50单,转化率1.2%
  • 优化4个月后:月均自然订单210单,转化率2.8%
  • 效果提升:订单增长320%,转化率提升133%

行业案例 - 教育

  • 优化前:月均咨询量35个,主要依赖付费广告
  • 优化5个月后:月均咨询量180个,自然流量占比65%
  • 效果提升:咨询量增长414%,营销成本降低57%

为什么选择我们的SEO服务

专业团队

  • 10年以上SEO经验专家带队
  • 百度、Google认证工程师
  • 内容创作、技术开发、数据分析多领域团队
  • 持续培训保持技术领先

数据驱动

  • 自主研发SEO分析工具
  • 实时排名监控系统
  • 竞争对手深度分析
  • 效果可视化报告

透明合作

  • 清晰的服务内容和价格
  • 定期进展汇报和沟通
  • 效果数据实时可查
  • 灵活的合同条款

我们的SEO服务理念

我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。

提交需求或反馈

Demand feedback