首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >IIS W3WP是否使用非阻塞I/O来服务静态内容?

IIS W3WP是否使用非阻塞I/O来服务静态内容?
EN

Server Fault用户
提问于 2014-12-09 22:38:46
回答 1查看 1.2K关注 0票数 4

比方说..。

IIS正在为大小为10 in的静态.MP3资源服务。对资源的请求传入HTTP.sys,并发送到适当的W3WP进程来处理。然后,工作进程从池中抓取一个线程来处理此请求。现在,根据我的假设,在从磁盘读取.MP3资源时,所述线程将被I/O绑定。这个准确吗?每次为该项目提出请求时,池中的线程都从磁盘读取相同的内容?W3WP是否使用非阻塞I/O来获取项目?

接下来,假设对同一个.MP3文件有1000个同时请求;由于与其他请求资源相比,大小不同,这会对站点造成影响吗?缓慢,排队等?

EN

回答 1

Server Fault用户

发布于 2014-12-10 13:31:40

这取决于您如何编写web服务或应用程序。在这种情况下,我们必须就“非阻塞”或“异步”的含义达成一致。

通常,在从存储中检索文件以服务静态内容时,w3wp.exe不使用异步I/O调用。当然,这并不意味着w3wp.exe已经完全死掉了,因为它恰好提供了一个10 is的文件。每个工作进程(其中可以有多个同时运行在服务器上的实例)都有一个完整的线程池,包括专用于I/O操作的线程。

当用户通过web从IIS请求静态文件时,w3wp.exe为请求的文件发出IRP_MJ_CREATE (CreateFile API)。(这可能来自硬盘,也可能来自文件缓存,但这与这个问题无关。)IRP_MJ_CREATE操作的选项是“泛型读取”,根据MSDN文档MSDN文档,这实际上是一组选项:

STANDARD_RIGHTS_READ、FILE_READ_DATA、FILE_READ_ATTRIBUTES、FILE_READ_EA和同步。

这里有趣的是同步选项:

·调用方要通过等待返回的FileHandle来同步I/O完成,必须设置同步标志。否则,作为设备或中间驱动程序的调用方必须使用事件对象来同步I/O完成。

您也可以为异步I/O使用相同的CreateFile API,但您可以判断这不是异步调用,因为没有使用重叠标志。

CreateFile提供了创建同步或异步文件或设备句柄的功能。同步句柄的行为使得使用该句柄的I/O函数调用被阻塞,直到它们完成,而异步文件句柄使系统能够立即从I/O函数调用返回,无论它们是否完成了I/O操作。如前所述,这种同步和异步行为是通过在FILE_FLAG_OVERLAPPED参数中指定dwFlagsAndAttributes来确定的。

因此,是的,一千名用户同时从您的网站下载一个10 to的文件会对您的服务器造成性能影响。IIS解决此问题的主要策略是使用大量线程。线程耗尽、线程池优化和大小调整是IIS管理员需要了解的真实情况。如果你有一个非常庞大的网站,你甚至可能会因为I/O绑定和计算绑定等原因而进入将静态内容移动到一个单独的get服务器场的游戏。IIS性能调优是一个非常复杂的主题,而这个特定的versus错误答案在总体方案上是相当迂腐的。例如,可以在IIS中使用异步处理程序。这取决于您如何编写web服务/应用程序。

票数 3
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/650403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档