在你的服务器端代码中使用线程和创建异步处理

原创 2004年06月08日 10:41:00

小结:  对于开发者来说幸运的是:线程在asp.net中远远比在asp中来的容易。本篇文章中,作者注视线程于asp.net http pipeline中,同时解释线程在开发者没有卷入的情况是如何被高效管理的。 本篇文章考虑CLR线程池是如何被asp.net 服务请求使用的,还有池在处理,模型,和应用的机制,覆盖恶劣IIS5 IIS6,及它们在请求处理和线程分配的不同。最后,探讨了对于需要使用线程的开发者来说,何时和如何使用异步处理在他们的应用中。

 

在传统的asp中,开发者面对线程问题之于他们知道应该要做什么要多。因为asp是建立于com之上的,关于元件的线程需求这儿有非常详细而精确的规范。页面所使用的元件为了最大效率原因需要置于公寓线程中。相反地,在Session 和应用状态中的元件需要便捷的环境并且能够聚合于自由线程集合中,也能够保护他们的状态防止被并发的访问。

 

如果你查看asp.net的文档,结果你会发现关于线程需求是如此之少。难道这就意味着所有的线程问题都被解决了并且asp.net开发者可以放心的去开发他们的aspx页面和NFC没有混乱在并发问题上? 不,大多数情况下并不是这样。

 

本文中,我将在不增加开发者负担的情况下,探索http 管道中线程的细节和如何有效的管理线程。同时我将看一下asp.net如何使用CLR 线程池处理服务请求的。

 

Asp.net中的线程

  为了有效的服务多个客户请求,Web Server 通过使用多个进程或生成多个线程来响应服务请求。Asp.net 没使用异常和在一个进程中响应请求使用多个线程。基于这个现状,asp.net开发者不需要关心多线程环境问题。页面需求响应总是在一个线程中, 并且当有一个新的需求时,一个新的页面将会创建一个截然不同的实例。应用的不同实例和模型元件总是被响应每一个请求。 然而,理解如何使用线程来响应请求是非常重要的。

  开始之际,asp.net使用CLR线程池响应请求。池的大小在机器配置文件中(machine.config),默认被设置为25工作线程 25I/O线程:

  

<processModel enable="true" <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

              •••

            maxWorkerThreads="25"

            maxIoThreads="25" />

(待续)

在你的服务器端代码中使用线程和创建异步处理(4)

在两种情况下有如此的不同, 最让人困扰的问题是响应fast.aspx的页面比原来要多4秒的时间,原来用非常短的时间.虽然这个例子是我们人为, 但这个例子显示了当你有如此相关的响应慢的页面是最糟糕的情形...
  • wildhorseli
  • wildhorseli
  • 2004年06月10日 17:06
  • 1093

在你的服务器端代码中使用线程和创建异步处理(3)

IIS 5.0 and 6.0 的线程分派位于IIS5.0上的请求是典型的基于I/O线程的响应,或者是线程异步实现I/O,因为使用异步写命名管道把这些请求分派给工作进程。当工作进程中响应一个请求时,它...
  • wildhorseli
  • wildhorseli
  • 2004年06月09日 17:12
  • 1008

在你的服务器端代码中使用线程和创建异步处理(结束)

用定制线程异步处理者为了创建一个真正的异步处理者, 你必须在BeginProcessRequest响应中手工生成额外的线程.成功创建异步处理者有3个重要的特征. 一 构造一个支持IAsyncResul...
  • wildhorseli
  • wildhorseli
  • 2004年06月10日 16:58
  • 1022

在你的服务器端代码中使用线程和创建异步处理(2)

线程处理对于IIS5和IIS6是不同的是不同的,我会简短地讨论一下这个问题。对于来的每一个请求,一个新的实例就会被创建,为了避免过于频繁的分配应用和模块,每一个应用域维护了应用和模块的池。每个应用池的...
  • wildhorseli
  • wildhorseli
  • 2004年06月09日 17:12
  • 831

spring 异步处理 :

引言: 在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的;但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在Spring 3....
  • xiaoliuliu2050
  • xiaoliuliu2050
  • 2016年04月22日 18:47
  • 856

远程线程注入的原理和实现方法

转载:http://blog.csdn.net/whatday/article/details/8975930 一、远程线程注入基本原理 远程线程注入——相信对Windows底层编程和系统安全熟悉...
  • heluan123132
  • heluan123132
  • 2015年06月08日 14:36
  • 5897

使用线程池和反射实现异步任务

反射,线程池,异步返回
  • Willon_tom
  • Willon_tom
  • 2016年09月22日 10:34
  • 334

异步消息处理机制--线程

多线程编程 执行一条耗时操作,需放在子线程里运行 1、线程的基本用法 新建类继承 或实现接口  ,重写方法--(可直接内部类) ● class MyThread extends Thread ...
  • qq_35893033
  • qq_35893033
  • 2017年02月11日 14:06
  • 396

java中异步处理和同步处理分别是什么意思?

原问题答案 同步:发送一个请求,等待返回,然后再发送下一个请求  异步:发送一个请求,不等待返回,随时可以再发送下一个请求  同步可以避免出现死锁,读脏数据的发生,一般共享某一资源的时候...
  • u010217750
  • u010217750
  • 2016年08月23日 15:49
  • 2012

NIO 多线程处理异步队列

本文使用java的NIO简单实现server-client模式,处理异步队列。缓存队列类
  • Ant_Shen
  • Ant_Shen
  • 2017年04月22日 20:59
  • 463
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在你的服务器端代码中使用线程和创建异步处理
举报原因:
原因补充:

(最多只允许输入30个字)