文档库 最新最全的文档下载
当前位置:文档库 › 线程池设计原理

线程池设计原理

线程池设计原理
线程池设计原理

了解JAVA多线程编程的人都知道,要产生一个线程有两种方法,一是类直接继承Thread 类并实现其run()方法;二是类实现Runnable接口并实现其run()方法,然后新建一个以该类为构造方法参数的Thread,类似于如下形式: Thread t=new Thread(myRunnable)。而最终使线程启动都是执行Thread类的start()方法。

在JAVA中,一个线程一旦运行完毕,即执行完其run()方法,就不可以重新启动了。此时这个线程对象也便成了无用对象,等待垃圾回收器的回收。下次想再启动这个线程时,必须重新new出一个线程对象再start之。频繁地创建和销毁对象不仅影响运行效率,还可能因无用线程对象来不及被回收而产生大量的垃圾内存,在存储空间和处理速度都相对受限的移动平台上这种影响尤为显著。那么,能否重新设计一种线程类,使其能够被反复启动而无需频繁地创建和销毁对象呢?

当然可以。下面我就介绍一下对这个“可重启线程”类的设计。

首先必须明确,如果仍是把想要线程去做的任务直接放在线程的run()方法中,是无论如何无法达成目的的,因为就像上面已经说的,JAVA的线程类一旦执行完run()方法就无法再启动了。所以唯一可行的办法是,把用户程序要做的run()方法(不妨称作“用户过程”)套在线程实际的run()方法内部的while循环体内,当用户过程执行完后使线程wait。当调用restart方法重启线程时,实际就是唤醒等待中的线程使之开始下一次while循环。大致的思想确定了,下面的代码就很好理解了:

public class ReusableThread implements Runnable {

//线程状态监听者接口

public interface ThreadStateListener {

public abstract void onRunOver(ReusableThread thread);//当用户过程执行完毕后调用的方法

}

public static final byte STATE_READY=0; //线程已准备好,等待开始用户过程

public static final byte STATE_STARTED=1; //用户过程已启动

public static final byte STATE_DESTROYED=2; //线程最终销毁

byte mState; //标示可重启线程的当前状态

Thread mThread; //实际的主线程对象

Runnable mProc; //用户过程的run()方法定义在mProc中ThreadStateListener mListener; //状态监听者,可以为null

/** Creates a new instance of ReusableThread */

public ReusableThread(Runnable proc) {

mProc = proc;

mListener = null;

mThread = new Thread(this);

mState = STATE_READY;

}

public byte getState() {return mState;}

public void setStateListener(ThreadStateListener listener) { mListener = listener;

}

/**可以在处于等待状态时调用该方法重设用户过程*/ public synchronized boolean setProcedure(Runnable proc) { if (mState == STATE_READY) {

mProc = proc;

return true;

}

else

return false;

}

/**开始执行用户过程*/

public synchronized boolean start() {

if (mState == STATE_READY) {

mState = STATE_STARTED;

if (!mThread.isAlive()) mThread.start();

notify(); //唤醒因用户过程执行结束而进入等待中的主线程

return true;

}

else

return false;

}

/**结束整个线程,销毁主线程对象。之后将不可再次启动*/ public synchronized void destroy() {

mState = STATE_DESTROYED;

notify();

mThread = null;

}

public void run() {

while (true) {

synchronized (this) {

try {

while (mState != STATE_STARTED) {

if (mState == STATE_DESTROYED) return;

wait();

}

} catch(Exception e) {e.printStackTrace();}

}

if (mProc != null) mProc.run();

if (mListener != null) mListener.onRunOver(this); //当用户过程结束后,执行监听者的onRunOver方法

synchronized (this) {

if (mState == STATE_DESTROYED) return;

mState = STATE_READY;

}

}

}

}

代码很好懂是不是?但是要解释一下为什么要有一个“状态监听者”接口。有时候我们可能想要在用户过程结束后得到一个及时的通知,好进行另外的处理,这时状态监听者的onRunOver方法就有了用处。一个直观的例子是,在下面要提到的“线程池”类中,一个可重启线程执行完一次用户过程后应当自动回收入池,这时就可以把回收入池的动作放在onRunOver方法中,而它的参数就是该可重启线程对象,于是就可以把参数所指示的对象回收进线程池中。

至于线程池类,其实就是以前提到的对象池类的一个子类,其中的对象全是ReusableThread类的。另外它实现了ReusableThread.ThreadStateListener接口,以便可以在用户过程结束时及时收到通知,执行回收线程的工作:

public class ThreadPool extends ObjectPool implements ReusableThread.ThreadStateListener {

public static final int DefaultNumThreads = 16; //默认池容量

public ReusableThread getThread() {

return (ReusableThread)fetch();

}

public void onRunOver(ReusableThread thread) {

recycle(thread); //当用户过程结束时,回收线程}

private void init(int size) {

ReusableThread thread;

//初始化线程池内容

for (int i=0; i

thread = new ReusableThread(null);

thread.setStateListener(this);

setElementAt(thread, i);

}

}

public ThreadPool(int size) {

; super(size);

init(size);

}

public ThreadPool() {

super(DefaultNumThreads);

init(DefaultNumThreads);

}

}

当然,还有一些可能需要添加的功能,因为既然只是比普通线程多了一个可重启的“增强”型线程类,那么原来Thread类具有的功能也应该具有,比如线程的sleep()。不过那些比较简单,这里就略去了。

下面编写测试程序。我准备这样进行:并不用到线程池类,而是对对象池类和可重启线程类进行联合测试,该对象池中的对象所属的类CharEmitter实现了Runnable接口和线程状态监听者接口,并且含有一个可重启线程成员对象,它并不包含在任何线程池对象中,而是独立使用的。当此线程的用户过程(定义在CharEmitter类中)结束后,onRunOver方法执行回收本CharEmitter对象入池的动作。这样就同时起到了间接测试线程池类的作用,因为它与对象池的区别也不过是在onRunOver中执行回收动作而已。

还是直接上代码说得清楚:

TestThreadPool.java :

/**字符放射器*/

class CharEmitter implements Runnable, ReusableThread.ThreadStateListener { char c; //被发射的字符

boolean[] isEmitting; //标示某字符是否正被发射(直接以字符对应的ASCII码作下标索引)

ReusableThread thread; //可重启线程对象

ObjectPool myHomePool; //为知道应把自己回收到哪里,需要保存一个到自己所在对象池的引用

CharEmitter(ObjectPool container, boolean[] isCharEmitting) {

isEmitting=isCharEmitting;

myHomePool=container;

thread=new ReusableThread(this); //新建可重启线程对象,设其用户过程为CharEmitter 类自己定义的

}

/**开始“发射”字符*/

public void emit(char ch) {

//字符被要求只能是'0'到'9'之间的数字字符

if (ch>='0' && ch<='9') {

c=ch;

}

else c=' ';

thread.start(); //启动线程

}

public void run() {

if (c==' ') return; //若不是数字字符直接结束

//为便于观察,不同数字之前的空格数目不同,以便将其排在不同列上

int spaceLen=c-'0';

StringBuffer s=new StringBuffer(spaceLen+1);

for (int i=0; i

s.append(c);

while (isEmitting[c]) {

System.out.println(s); //不断地向屏幕写字符

}

}

/**实现线程状态监听者接口中的方法*/

public void onRunOver(ReusableThread t) {

myHomePool.recycle(this); //回收自身入池

}

}

public class TestThreadPool {

public static void main(String[] args) {

// TODO Auto-generated method stub

//标示字符是否正被发射的标志变量数组

boolean[] isEmitting=new boolean[256];

for (int i=0; i<256; i++) isEmitting[i]=false;

ObjectPool emitters=new ObjectPool(10); //新建对象池,容量为10 for (int i=0; i<10; i++) {

//用CharEmitter对象填满池子

emitters.setElementAt(new CharEmitter(emitters, isEmitting), i);

}

byte[] c=new byte[1];

CharEmitter emitter;

while(true) {

try {

System.in.read(c); //从键盘读入一个字符,以回车键表示输入结束} catch(Exception e) {e.printStackTrace();}

if (isEmitting[c[0]]) {

isEmitting[c[0]]=false; //若字符正被发射,则结束其发射

}

else {

isEmitting[c[0]]=true;

emitter=(CharEmitter)emitters.fetch(); //向池中索取一个CharEmitter对象

emitter.emit((char)c[0]); //发射用户输入的字符

}

}

}

}

执行后,从键盘上敲进0到9之间的任意数字并按回车,之后会不断地在屏幕上滚动显示该数字;再次输入同样的数字则不再显示该数字。同时存在多个数字被发射时,可以明显看出不同数字的显示是交错进行的,这正是由于虚拟机在各线程间调度的结果。运行结果表明,我们设计的类功能完全正确。

在以后要说的J2ME中蓝牙通讯的辅助类中,将会看到,线程池与可重启线程起到了不可替代的作用。

地震勘探原理与解释私人整理版

绪论部分 地震勘探①它是通过人工方法激发地震波,研究地震波在地层中传播的情况,以查明地下的地质构造和有用矿藏的一种勘探方法②包括三种方法:反射波法地震勘探方法、折射波法~、透射波法~③原理是利用地震波从地下地层界面反射至地面时带回来的旅行时间和波形变化的信息推断地下的地层构造和岩性 地震勘探的生产过程及其任务①野外采集工作(在初步确定的有含油气希望的地区布置测线,人工激发地震波,并记录下来)②室内资料处理(利用数字电子计算机对原始数据进行加工处理,以及计算地震波的传播速度)③地震资料的解释(综合其他资料进行深入研究分析,对地下构造特点说明并绘制主要层位完整的起伏形态图件,最后查明含油气构造或者地层圈闭,提供钻探井位) 油气勘探的方法特点方法有:地质法,物探法,钻探法①地质法是通过观察,研究出露在地面的地层,对地质资料进行分析综合,了解一个地区有无生成石油和储存石油的条件,最后提出对该地区的含油气远景评价,指出有利地区②物探法是根据地质学和物理学原理。它是利用各种物理仪器在地面观测地壳上的各种物理现象,从而推断地质构造特点,寻找可能的储油构造。是一种间接找油的方法③钻探法就是利用物探提供的井位进行钻探,直接取得地下最可靠的地质资料来确定地下的构造特点及含油气的情况。 第一章地震波运动学 子波具有确定的起始时间和有限能量的信号称为子波在地震勘探领域中子波通常指的是1—2个周期组成的地震脉冲。 地震子波由于大地滤波器的作用,尖脉冲变成了频率较低、具有一定延续时间的波形,成为地震子波。震源产生的信号传播一段时间后,波形趋于稳定,这时的地震波也为地震子波。 地震波运动学研究地震波波前的空间位置与其传播时间的关系,研究波的传播规律,

地震勘探原理复习题答案

绪论 一、名词解释 1.地球物理方法(ExplorationMethods):利用各种仪器在地表观测地壳上的各种物理现象,从而推断、了 解地下的地质构造特点,寻找可能的储油构造。它是一种间接找油的方法。特点:精度和成本均高于 地质法,但低于钻探方法。 2、地震勘探:就是利用人工方法激发的地震波(弹性波),研究地震波在地层中传播的规律,以查明地下的地质构造,从而来确定矿藏(包括油气、矿石、水、地热资源等)等的位置,以及获得工程地质信息。 二、简答题 1、了解地下资源信息有那些主要手段。 (1)、地质法(2)、地球物理方法(3)、钻探法(4)、综合方法:地质、物探(物化探)、钻探 结合起来,进行综合勘探。其中,地质法贯穿始终,物探是关键,钻探是归宿。 2有几种主要地球物理勘探方法,它们的基本原理。 地球物理勘探方法是以岩矿石(或地层)与其围岩的物理性质差异为物质基础,用专门的仪器设备 观测和研究天然存在或人工形成的物理场的变化规律,进而达到查明地质构造寻找矿产资源和解决工 程地质、水文地质以及环境监测等问题为目的勘探,叫地球物理勘探,简称物探。相应的各种勘探方法,叫地球物理勘探方法,简称为物探方法,有地震勘探、重力勘探、磁法勘探、电法勘探、地球物 理测井。 (1)重力勘探:利用岩石、矿物(地层)之间的密度差异,引起重力场变化,产生重力异常,用重 力仪测量其异常值,根据异常变化情况反演地下地质构造情况。 (2)磁法勘探:利用岩石、矿物(地层)之间的磁性差异,引起磁场变化,产生磁力异常,用磁力 仪测量其异常值,根据异常变化情况反演地下地质构造情况。 (3)电法勘探:利用岩石、矿物(地层)之间的电性差异,引起电(磁)场变化,产生电性异常,用 电法(磁)仪测量其异常,根据异常变化情况反演地下地质构造情况。 (4)地震勘探:利用岩石、矿物(地层)之间的弹性差异,引起弹性波场变化,产生弹性异常(速 度不同),用地震仪测量其异常值(时间变化),根据异常变化情况反演地下地质构造情况。 (5)地球物理测井:电测井;电磁测井;放射性测井;声波测井;地温测井;密度测井。 3、地震勘探的主要工作环节。 (1)野外数据采集(2)室内资料处理(3)地震资料解释

JAVA线程池原理333

在什么情况下使用线程池? 1.单个任务处理的时间比较短 2.将需处理的任务的数量大 使用线程池的好处: 1.减少在创建和销毁线程上所花的时间以及系统资源的开销 2.如不使用线程池,有可能造成系统创建大量线程而导致消耗完系统内存以及”过度切换”。 线程池工作原理:

线程池为线程生命周期开销问题和资源不足问题提供了解决方案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。其好处是,因为在请求到达时线程已经存在,所以无意中也消除了线程创建所带来的延迟。这样,就可以立即为请求服务,使应用程序响应更快。而且,通过适当地调整线程池中的线程数目,也就是当请求的数目超过某个阈值时,就强制其它任何新到的请求一直等待,直到获得一个线程来处理为止,从而可以防止资源不足。 线程池的替代方案 线程池远不是服务器应用程序内使用多线程的唯一方法。如同上面所提到的,有时,为每个新任务生成一个新线程是十分明智的。然而,如果任务创建过于频繁而任务的平均处理时间过短,那么为每个任务生成一个新线程将会导致性能问题。 另一个常见的线程模型是为某一类型的任务分配一个后台线程与任务队列。AWT 和 Swing 就使用这个模型,在这个模型中有一个 GUI 事件线程,导致用户界面发生变化的所有工作都必须在该线程中执行。然而,由于只有一个 AWT 线程,因此要在 AWT 线程中执行任务可能要花费相当长时间才能完成,这是不可取的。因此,Swing 应用程序经常需要额外的工作线程,用于运行时间很长的、同 UI 有关的任务。 每个任务对应一个线程方法和单个后台线程(single-background-thread)方法在某些情形下都工作得非常理想。每个任务一个线程方法在只有少量运行时间很长的任务时工作得十分好。而只要调度可预见性不是很重要,则单个后台线程方法就工作得十分好,如低优先级后台任务就是这种情况。然而,大多数服务器应用程序都是面向处理大量的短期任务或子任务,因此往往希望具有一种能够以低开销有效地处理这些任务的机制以及一些资源管理和定时可预见性的措施。线程池提供了这些优点。 工作队列 就线程池的实际实现方式而言,术语“线程池”有些使人误解,因为线程池“明显的”实现在大多数情形下并不一定产生我们希望的结果。术语“线程池”先于Java 平台出现,因此它可能是较少面向对象方法的产物。然而,该术语仍继续广泛应用着。 虽然我们可以轻易地实现一个线程池类,其中客户机类等待一个可用线程、将任务传递给该线程以便执行、然后在任务完成时将线程归还给池,但这种方法却存在几个潜在的负面影响。例如在池为空时,会发生什么呢?试图向池线程传递任务的调用者都会发现池为空,在调用者等待一个可用的池线程时,它的线程将阻塞。我们之所以要使用后台线程的原因之一常常是为了防止正在提交的线程被阻塞。完全堵住调用者,如在线程池的“明显的”实现的情况,可以杜绝我们试图解决的问题的发生。 我们通常想要的是同一组固定的工作线程相结合的工作队列,它使用 wait() 和

线程池的原理与实现详解

线程池的原理与实现详解 https://www.wendangku.net/doc/7414320682.html,/article/41375.htm2013下面利用C 语言来实现一个简单的线程池,为了使得这个线程池库使用起来更加方便,特在C实现中加入了一些OO的思想,与Objective-C不同,它仅仅是使用了struct来模拟了c++中的类,其实这种方式在linux内核中大量可见 一. 线程池的简介 通常我们使用多线程的方式是,需要时创建一个新的线程,在这个线程里执行特定的任务,然后在任务完成后退出。这在一般的应用里已经能够满足我们应用的需求,毕竟我们并不是什么时候都需要创建大量的线程,并在它们执行一个简单的任务后销毁。 但是在一些web、email、database等应用里,比如彩铃,我们的应用在任何时候都要准备应对数目巨大的连接请求,同时,这些请求所要完成的任务却又可能非常的简单,即只占用很少的处理时间。这时,我们的应用有可能处于不停的创建线程并销毁线程的状态。虽说比起进程的创建,线程的创建时间已经大大缩短,但是如果需要频繁的创建线程,并且每个线程所占用的处理时间又非常简短,则线程创建和销毁带给处理器的额外负担也是很可观的。 线程池的作用正是在这种情况下有效的降低频繁创建销毁

线程所带来的额外开销。一般来说,线程池都是采用预创建的技术,在应用启动之初便预先创建一定数目的线程。应用在运行的过程中,需要时可以从这些线程所组成的线程池里申请分配一个空闲的线程,来执行一定的任务,任务完成后,并不是将线程销毁,而是将它返还给线程池,由线程池自行管理。如果线程池中预先分配的线程已经全部分配完毕,但此时又有新的任务请求,则线程池会动态的创建新的线程去适应这个请求。当然,有可能,某些时段应用并不需要执行很多的任务,导致了线程池中的线程大多处于空闲的状态,为了节省系统资源,线程池就需要动态的销毁其中的一部分空闲线程。因此,线程池都需要一个管理者,按照一定的要求去动态的维护其中线程的数目。 基于上面的技术,线程池将频繁创建和销毁线程所带来的开销分摊到了每个具体执行的任务上,执行的次数越多,则分摊到每个任务上的开销就越小。 当然,如果线程创建销毁所带来的开销与线程执行任务的开销相比微不足道,可以忽略不计,则线程池并没有使用的必要。比如,FTP、Telnet等应用时。 二. 线程池的设计 下面利用C语言来实现一个简单的线程池,为了使得这个线程池库使用起来更加方便,特在C实现中加入了一些OO的思想,与Objective-C不同,它仅仅是使用了struct来模拟

《地震勘探原理》

石油大学硕士研究生入学考试科目《地震勘探原理》考试大纲 目的: 考查考生对地震波运动学,动力学理论掌握的程度,对地震勘探工作方法了解的程度,分析地震勘探中基本问题的能力。 要求: 要求考生掌握地震波运动学和动力学基本理论、基本概念,推导时距曲线公式,分析地震记录时间域与频率域的特点。了解地震勘探野外工作方法,掌握地震组合法与多次复盖法基本原理。区分不同速度概念,掌握地震分辨能力有关理论,能分析地震记录上反射波特点,了解地震资料解释的基本框架和内容。 范围: 地震波运动学――地震波基本概念,一层及多层界面反射波时距曲线,地震折射波运动学,连续介质中地震波运动学,透过波和反射波垂直时距曲线。 地震信号的频谱分析――频谱的基本概念与频谱图,傅立叶展式的重要性质,频谱资料的获得和整理,地震波频谱特征及其应用,线性时不变系统的滤波方程。 地震勘探野外工作方法――干扰波类型与特点,干扰波调查方法,观测系统及其图示,道间距选择及空间假频问题,低速带问题及测定方法。 地震组合法原理――组合的方向特性,组合对随机干扰的统计效应,确定组合参数的方法,组合的频率特性,组合方式。 共反射点叠加法――共反射点时距曲线方程,多次反射波的特点,多次叠加特性和统计效应,多次复盖参数选择,影响叠加效果因素分析。 地震波速度――地震波在岩层中传播速度,几种速度概念,平均速度测定,叠加速度求取,各种速度之间关系及换算公式。 地震勘探资料解释的理论基础――地震剖面特点,地震绕射波和物理地震学,地震勘探的分辨能力,地震剖面偏移原理,弯曲界面反射波特点。 地震波动力学――面波,波动地震学与几何地震学关系。 地震资料的岩性解释――地震波速度资料的地层岩性解释,厚层反射波振幅信息的应用,薄层反射振幅的利用,一维模型计算,反射系数和反射率概念。 参考书:《地震勘探原理》上、下册,陆基孟主编,石油大学出版社。

地震勘探原理考试试题(

地震勘探原理考试试题(C) 一、解释下列名词 1、反射波 2、有效波 3、干扰波 4、多次波 二、填空 1.用于石油和天然气勘探的物探方法,主要有_______勘探,_________勘探, __________勘探和_________勘探.其中是有效的物探方法是地震勘探. 2.用_________方法(如爆炸,敲击等)产生振动,研究振动在_________的传播规律,进一步查明________地质构造和有用矿藏的一种_______方法,叫地震勘探. 3.地震勘探分__________地震法、__________地震法和____________地震法三种.用于石油和天然气勘探主要是_________地震法,其它两方法用的较少. 4. 反射波地震勘探,首先用人工方法使__________产生振动,振动在地下________形成地震波,地震波 5反射波到达地表时,引起地表的_________.检波器把地表的_________转换成___________,通过电缆 把电振动输送到数字地震仪器里, 记录在磁带上的, 这就成为_______________地震记录. 6. 对数字磁带地震记录,用电子计算机进行地震资料___________,得到各种时间剖面,再对时间剖面进行地震资料__________,做出地震____________,并提出____________进行钻探,这样就完成了地震勘探工作. 7. 根据炮点___________和地下反射点三者之间的关系,要__________追踪反 射波,炮点和接收点之间需要保持一定的_______________关系.这种系称为_________________. 8.根据炮点和接收点的相对位置,地震测线分为__________和_____________两大类. 9.地震波属于_________波的一种,振动只有在弹性__________中,才能传播出去而形成波. 三、选择题 1 在反射波地震法勘探中,_____________就是有效波. A.多次波; B.反射波. 2 共反射点记录反映的是地下界面上_____________. A.一个点; B.许多点. 3 在同一反射界面条件下,多次反射波比一次反射波_____________. A.传播时间长; B.反射能量强. 4. 对共反射点道集记录,经过动校正后,各道反射波的传播时间,都校正成____________反射时间. A.垂直; B.标准. 5 水平迭加能使多波受到压制,反射波得到______________. A.突出; B.增强; C.压制; D.变化不明显. 四、 简答题 1、什么是多次覆盖? 2、什么是多次波记录? 3、什么是反射定律? 4、什么是时距曲线? 五、计算题 1、地下有一水平界面,其上介质的速度为3000米/秒.从水平叠加剖面上知其反射时间为2.25秒,试问此反射界面的深度是多少? 2、计算波阻抗Z 知:砂岩速度V=3500m/s,密度ρ=2.7g/cm的立方. 求:Z=?

地震勘探原理知识点总结

第三章地震资料采集方法与技术 一.野外工作概述 1.陆地石工基本情况介绍 试验工作内容:①干扰波调查,了解工区内干扰波类型与特性。 ②地震地质条件调查,了解低速带的特点、潜水面的位置、地震界面的存在 与否、地震界面的质量如何(是否存在地震标志层)、速度剖面特点等。 ③选择激发地震波的最佳条件,如激发岩性、激发药量、激发方式等。 ④选择接收和记录地震波的最佳条件,包括最合适的观测系统、组合形式和 仪器因素的选择等。 生产工作过程:地震队的组成 (1)地震测量:把设计中的测线布置到工作地区,在地面上定出各激发点和接收排列上各检波点的位置 (2)地震波的激发 陆上地震勘探的震源类型:炸药震源和可控震源。激发方式:炸药震源 的井中激发、土坑等。激发井深:潜水面以下1-3m,(6-7m)。 (3)地震波的接收 实现方式:检波器、排列和地震仪器 2.调查干扰波的方法 (1)小排列(最常用) 3-5m道距、连续观测 目的:连续记录、追踪各种规则干扰波,分析研究干扰波的类型和分布规律。 从地震记录中可以得到干扰波的视周期和视速度等基本特征参数 (2)直角排列 适用于不知道干扰波传播方向的情况 Δt1和Δt2的合矢量的方向近似于干扰波的传播方向 (3)三分量检波器观测法 (4)环境噪声调查 信噪比:有效波的振幅/干扰波的振幅(规则) 信号的能量/噪声的能量 3.各种干扰波的类型和特点 (1)规则干扰 指具有一定主频和一定视速度的干扰波,如面波、声波、浅层折射波、侧面波等。 面波(地滚波):在地震勘探中也称为地滚波,存在于地表附近,振幅随深度增加呈指数衰减。其主要特点:①低频:几Hz~20Hz;②频散(Dispersion):速度随频率而变化;③低速:100m/s ~1000m/s,通常为200m/s~500m/s;④质点的振动轨迹为逆时针方向的椭圆。面波时距曲线是直线,记录呈现“扫帚状”,面波能量的强弱与激发岩性、激发深度以及表层地震地质条件有关。(能量较强) 声波:速度为340m/s左右,比较稳定,频率较高,延续时间较短,呈窄带出现。 浅层折射波:当表层存在高速层或第四系下面的老地层埋藏浅,可能观测到同相轴为直线的浅层折射波。 工业电干扰:当地震测线通过高压输电线路时产生,整张记录或部分记录道上出现50Hz的正弦干扰波。 侧面波:在地表条件比较复杂的地区进行地震勘探时,常出现侧面波干扰。

java深入理解线程池

深入研究线程池 一.什么是线程池? 线程池就是以一个或多个线程[循环执行]多个应用逻辑的线程集合. 注意这里用了线程集合的概念是我生造的,目的是为了区分执行一批应用逻辑的多个线程和 线程组的区别.关于线程组的概念请参阅基础部分. 一般而言,线程池有以下几个部分: 1.完成主要任务的一个或多个线程. 2.用于调度管理的管理线程. 3.要求执行的任务队列. 那么如果一个线程循环执行一段代码是否是线程池? 如果极端而言,应该算,但实际上循环代码应该算上一个逻辑单元.我们说最最弱化的线程池 应该是循环执行多个逻辑单元.也就是有一批要执行的任务,这些任务被独立为多个不同的执行单元.比如: int x = 0; while(true){ x ++; } 这就不能说循环中执行多个逻辑单元,因为它只是简单地对循环外部的初始变量执行++操作. 而如果已经有一个队列 ArrayList al = new ArrayList(); for(int i=0;i<10000;i++){ al.add(new AClass()); } 然后在一个线程中执行: while(al.size() != 0){ AClass a = (AClass)al.remove(0); a.businessMethod(); } 我们说这个线程就是循环执行多个逻辑单元.可以说这个线程是弱化的线程池.我们习惯上把这些相对独立的逻辑单元称为任务. 二.为什么要创建线程池? 线程池属于对象池.所有对象池都具有一个非常重要的共性,就是为了最大程度复用对象.那么 线程池的最重要的特征也就是最大程度利用线程. 从编程模型模型上说讲,在处理多任务时,每个任务一个线程是非常好的模型.如果确实可以这么做我们将可以使用编程模型更清楚,更优化.但是在实际应用中,每个任务一个线程会使用系统限入"过度切换"和"过度开销"的泥潭. 打个比方,如果可能,生活中每个人一辆房车,上面有休息,娱乐,餐饮等生活措施.而且道路交道永远不堵车,那是多么美好的梦中王国啊.可是残酷的现实告诉我们,那是不可能的.不仅每个人一辆车需要无数多的社会资源,而且地球上所能容纳的车辆总数是有限制的. 首先,创建线程本身需要额外(相对于执行任务而必须的资源)的开销.

地震勘探原理名词解释(2)

第一章 地球物理方法(Exploration Methods): 利用各种仪器在地表观测地壳上的各种物 理现象,从而推断、了解地下的地质构造特点,寻找可能的储油构造。它是一种间接找油的方法。特点:精度和成本均高于地质法,但低于钻探方法。 地震勘探:就是利用人工方法激发的地震波(弹性波),研究地震波在地层中传播的规律,以查明地下的地质构造,从而来确定矿藏(包括油气、矿石、水、地热资源等)等的位置,以及获得工程地质信息。 第二章 地震勘探:通过人工方法激发地震波,研究地震波在地层中传播的情况,以查明地下的地质构造,力寻找油气田或其他勘探目的服务的一种物探方法. 地震波:在岩层中传播的弹性波。 反射定律:入射波与反射波分居法线两侧,反射角等于入射角,条件为:上下界面波阻抗存在差异,入射波与反射波类型相同. 地震子波:震源产生的信号传播一段时间后,波形趋于稳定,我们称这时的地震波为地震子波。 爆炸时产生的尖脉冲,在爆炸点附近的介质中以冲击波的形式传播,当传播到一的距离后,波形逐渐稳定,我们称这时的地震波为地震子波。 几何地震学:地震波的运动学是研究地震波,波前的空间位置与传播时间的关系,他与几何光学相似,也是引用波前,射线等几何图形来描述波的运动过程和规律,因此又叫几何地震学. 波形曲线:选定一个时刻t1,我们用纵坐标表示各质点离开平衡位置的距离,就得到一条曲线,这条曲线就叫做波在t1时刻沿x方向的波形曲线. 正常时差的定义:第一种定义:界面水平情况下,对界面上某点以炮检距x进行观测得到的反射波旅行时同以零炮检距(自激自收)进行观测得到的反射波旅行时之差,这纯粹是因为炮检距不为零引起的时差. 第二种定义:在水平界面情况下,各观测点相对于爆炸点纯粹是由于炮检距不同而引起的反射波旅行时间差. 倾角时差:当界面倾斜时,炮检距相同,但相邻反射点传播时间不同而产生的角度差由激发点两侧对称位置观测到的来自同一界面的反射波的时差。这一时差是由于界面存在倾角引起的。 波线:在条件适当时,可以认为波及其能量是沿着一条“路径”从波源传到所考虑的一点P,

地震勘探

地震勘探试题库 适用专业:勘查技术与工程 学制:四年本科 学时数:80 石家庄经济学院勘查技术学院 2001年2月 一、判断题(正确的画 ,错误的画 ,每题1分) 1.视速度小于等于真速度。() 2.平均速度大于等于均方根速度。() 3.倾斜入射的纵波产生转换波。() 4.倾斜界面情况下,折射波上倾方向接收时的视速度等于下倾方向的视速度。() 5.纵波和横波都是线性极化波。() 6.倾斜反射界面的视倾角大于真倾角。() 7.地震子波的延续时间长度同它的频带宽度成正比。() 8.地震波的传播速度就是波前面的传播速度。() 9.折射波时距曲线是通过原点的直线,视速度等于界面速度。() 10.法线入射的纵波产生转换波。() 11.由于大地滤波作用,使激发的短脉冲的频率变低。() 12.瑞雷面波是线性极化波。() 13.倾斜反射界面的视倾角小于真倾角。() 14.地震波的传播速度是介质质点的振动速度。() 15.沿地层倾向布置地震测线,倾斜反射界面的射线平面与地面垂直。()16.n个检波器组合后,有效波的振幅是未组合前单个检波器输出振幅的n 倍。() 17如果叠加速度大于有效波的真速度,动校正后有效波的同相轴与初至波的同相轴方向一致。() 18.水平叠加法的统计效应优于组合法。() 19.折射波的形成条件是地下存在波阻抗界面。() 20.对水平多层介质,叠加速度是均方根速度。() 21.对水平叠加法,偏移距增大,分辨率提高。() 22.地震测线任意观测点处的反射界面视深度和法线深度小于或等于真深度。() 23.倾斜反射界面情况下,共中心点时距曲线极小点位于界面的上倾方向。() 24.从各个方向的测线观测到的时距曲线极小点位置,一般可以确定反射界面的大致倾向。() 25.沿走向观测时,反射波时距曲线极小点位置随倾斜界面的倾角加大和埋深加深而偏离爆炸点越远。() 26.倾斜反射界面的反射波时距曲面等时线的地面投影为同心圆系,其圆心位于爆炸点处。()

地震勘探原理题库

地震资料采集试题库 一、判断题,正确者划√,错误者划×。 1、弹性介质中几何地震学的反射系数只与上下介质的速度和密度有关。() 2、纵波反射信息中包括有横波信息,因此可以利用纵波反射系数提取横波信息。() 3、在纵波 AVO分析中,我们可以提取到垂直入射的纵波反射系数剖面。() 4、当纵波垂直入射到反射界面时,不会产生转换横波。() 5、SH波入射到反射界面时,不会产生转换纵波。() 6、直达波总是比浅层折射波先到达。() 7、浅层折射波纯粹是一种干扰波。() 8、折射界面与反射界面一样,均是波阻抗界面。() 9、实际地震记录可以用鲁滨逊地震“统计”模型表示为:反射系数(R(t))与地震子波(W(t))的褶积 S(t)=W(t)*R(t)。() 10、面波极化轨迹是一椭圆,并且在地表传播。() 11、检波器组合可以压制掉所有的干扰波。() 12、可控震源的子波可以人为控制。() 13、对于倾斜地层来说,当最小炮检距和排列长度不变,并且排列固定不动时,上倾激发与下倾激发可获得地下相同的一段反射资料。() 14、单炮记录上就可以看出三维资料比二维资料品质好。() 15、资料的覆盖次数提高一倍,信噪比也相应地提高一倍。() 16、当单位面积内的炮点密度和接收道数一定时,面元越大,面元内的覆盖次数越高。() 17、覆盖次数均匀,其炮检距也均匀。() 18、无论何种情况下,反射波时距曲线均为双曲线形状。() 19、横向覆盖次数越高,静校正耦合越好。() 20、动校正的目的是将反射波校正到自激自收的位置上。() 21、当地下地层为水平时,可以不用偏移归位处理。() 22、偏移归位处理就是将CMP点归位到垂直地表的位置上。() 23、最大炮检距应等于产生折射波时的炮检距。()

Tomcat线程池实现简介

Tomcat线程池实现简介 目前市场上常用的开源Java Web容器有Tomcat、Resin和Jetty。其中Resin从V3.0后需要购买才能用于商业目的,而其他两种则是纯开源的。可以分别从他们的网站上下载最新的二进制包和源代码。 作为Web容器,需要承受较高的访问量,能够同时响应不同用户的请求,能够在恶劣环境下保持较高的稳定性和健壮性。在HTTP服务器领域,Apache HTTPD的效率是最高的,也是最为稳定的,但它只能处理静态页面的请求,如果需要支持动态页面请求,则必须安装相应的插件,比如mod_perl可以处理Perl脚本,mod_python可以处理Python脚本。 上面介绍的三中Web容器,都是使用Java编写的HTTP服务器,当然他们都可以嵌到Apache 中使用,也可以独立使用。分析它们处理客户请求的方法有助于了解Java多线程和线程池的实现方法,为设计强大的多线程服务器打好基础。 Tomcat是使用最广的Java Web容器,功能强大,可扩展性强。最新版本的Tomcat(5.5.17)为了提高响应速度和效率,使用了Apache Portable Runtime(APR)作为最底层,使用了APR 中包含Socket、缓冲池等多种技术,性能也提高了。APR也是Apache HTTPD的最底层。可想而知,同属于ASF(Apache Software Foundation)中的成员,互补互用的情况还是很多的,虽然使用了不同的开发语言。 Tomcat 的线程池位于tomcat-util.jar文件中,包含了两种线程池方案。方案一:使用APR 的Pool技术,使用了JNI;方案二:使用Java实现的ThreadPool。这里介绍的是第二种。如果想了解APR的Pool技术,可以查看APR的源代码。 ThreadPool默认创建了5个线程,保存在一个200维的线程数组中,创建时就启动了这些线程,当然在没有请求时,它们都处理“等待”状态(其实就是一个while循环,不停的等待notify)。如果有请求时,空闲线程会被唤醒执行用户的请求。 具体的请求过程是:服务启动时,创建一个一维线程数组(maxThread=200个),并创建空闲线程(minSpareThreads=5个)随时等待用户请求。当有用户请求时,调用threadpool.runIt(ThreadPoolRunnable)方法,将一个需要执行的实例传给ThreadPool中。其中用户需要执行的实例必须实现ThreadPoolRunnable接口。ThreadPool 首先查找空闲的线程,如果有则用它运行要执行ThreadPoolRunnable;如果没有空闲线程并且没有超过maxThreads,就一次性创建minSpareThreads个空闲线程;如果已经超过了maxThreads了,就等待空闲线程了。总之,要找到空闲的线程,以便用它执行实例。找到后,将该线程从线程数组中移走。接着唤醒已经找到的空闲线程,用它运行执行实例(ThreadPoolRunnable)。运行完ThreadPoolRunnable后,就将该线程重新放到线程数组中,作为空闲线程供后续使用。 由此可以看出,Tomcat的线程池实现是比较简单的,ThreadPool.java也只有840行代码。用一个一维数组保存空闲的线程,每次以一个较小步伐(5个)创建空闲线程并放到线程池中。使用时从数组中移走空闲的线程,用完后,再“归还”给线程池。ThreadPool提供的仅仅是线程池的实现,而如何使用线程池也是有很大学问的。让我们看看Tomcat是如何使用ThreadPool的吧。 Tomcat有两种EndPoint,分别是AprEndpoint和PoolTcpEndpoint。前者自己实现了一套线

地震勘探原理及方法 复习答案

《地震勘探原理及方法》复习提纲 一、名词解释 1.反射波在不同密度的媒质分界面发生反射的波 2.透射波地球物理学透射波即透过波 3.滑行波由透射定律可知,如果V2>V1 ,即sinθ2 > sinθ1 ,θ2 > θ1。当θ1还没到90o时,θ2 到达90o,此时透射波在第二种介质中沿界面滑行,产生的波为滑行波。 4.折射波当入射波大于临界角时,出现滑行波和全反射。在分界面上的滑行波有另一种特性,即会影响第一界面,并激发新的波。在地震勘探中,由滑行波引起的波叫折射波,也叫做首波。入射波以临界角或大于临界角入射高速介质所产生的波. 5.波前振动刚开始与静止时的分界面,即刚要开始振动的那一时刻 6.射波前 7.均匀介质反射界面以上的介质是均匀的,即地震波传播速度是一个常数。 8.层状介质指地质剖面是层状结构的,在每一层内速度是均匀的,但层与层之间速度是 不相同 9.振动图形和波剖面某点振动随时间的变化的曲线称为振动曲线,也称振动图。地震勘探中,沿测线画出的波形曲线,也称波剖面。 10.同相轴和等相位面同向轴是一组地震道上整齐排列的相位,表示一个新的地震波的到达,由地震记录上系统的相位或振幅变化表示。 11.时间场和等时面 12.视速度当波的传播方向与观测方向不一致(夹角θ)时,观测到的速度并不是 波前的真速度V,而是视速度Va。即波沿测线方向传播速度。 13. 离散付氏变换 14. 时间域把信号表示为振幅随时间变化的函数,称为信号在时间域的表现形 式。 15. 频率域把信号表示为振幅和相位随频率变化的函数,称为信号在频率域上 的表现形式。 16. 褶积由地震子波和反射系数得到地震记录(输出相应) 17. 离散褶积由离散的地震子波和反射系数得到地震记录 18. 互相关用来表示两个信号之间相似性的一个度量,通常通过与已知信号比 较用于寻找未知信号中的特性。 19. 自相关随机误差项的各期望值之间存在着相关关系,称随机误差项之间存 在自相关性 20. 离散互相关 21. 离散自相关 22. 采样间隔地震勘探中检波器接受的模拟信号转换为数字信号储存,需要采 样离散化,这个采样间隔就称为地震采样间隔。 23. 频率单位时间内完成周期性变化的次数 24. 炮检距激发点(炮)点到接收点(检)点的距离。 25.偏移距指炮点离第一个检波器的距离,等于最小炮检距,μΔx 。 26.观测系统观测系统是指地震波的激发点和接收点的相互位置关系。或激发点与接收排列的相对空间位置关系。观测系统分单边和双边放炮两大类,以上两观测系统又可根据有无偏移距分为端点观测系统和有偏移距观测系统。

线程池原理 C++实现

线程池原理及创建(C++实现) 时间:2010‐02‐25 14:40:43来源:网络 作者:未知 点击:2963次 本文给出了一个通用的线程池框架,该框架将与线程执行相关的任务进行了高层次的抽象,使之与具体的执行任务无关。另外该线程池具有动态伸缩性,它能根据执行任务的轻重自动调整线程池中线程的数量。文章的最后,我们给出一个 本文给出了一个通用的线程池框架,该框架将与线程执行相关的任务进行了高层次的抽象,使之与具体的执行任务无关。另外该线程池具有动态伸缩性,它能根据执行任务的轻重自动调整线程池中线程的数量。文章的最后,我们给出一个简单示例程序,通过该示例程序,我们会发现,通过该线程池框架执行多线程任务是多么的简单。 为什么需要线程池 目前的大多数网络服务器,包括Web服务器、Email服务器以及数据库服务器等都具有一个共同点,就是单位时间内必须处理数目巨大的连接请求,但处理时间却相对较短。 传统多线程方案中我们采用的服务器模型则是一旦接受到请求之后,即创建一个新的线程,由该线程执行任务。任务执行完毕后,线程退出,这就是是“即时创建,即时销毁”的策略。尽管与创建进程相比,创建线程的时间已经大大的缩短,但是如果提交给线程的任务是执行时间较短,而且执行次数极其频繁,那么服务器将处于不停的创建线程,销毁线程的状态。 我们将传统方案中的线程执行过程分为三个过程:T1、T2、T3。 T1:线程创建时间 T2:线程执行时间,包括线程的同步等时间 T3:线程销毁时间

那么我们可以看出,线程本身的开销所占的比例为(T1+T3) / (T1+T2+T3)。如果线程执行的时间很短的话,这比开销可能占到20%‐50%左右。如果任务执行时间很频繁的话,这笔开销将是不可忽略的。 除此之外,线程池能够减少创建的线程个数。通常线程池所允许的并发线程是有上界的,如果同时需要并发的线程数超过上界,那么一部分线程将会等待。而传统方案中,如果同时请求数目为2000,那么最坏情况下,系统可能需要产生2000个线程。尽管这不是一个很大的数目,但是也有部分机器可能达不到这种要求。 因此线程池的出现正是着眼于减少线程池本身带来的开销。线程池采用预创建的技术,在应用程序启动之后,将立即创建一定数量的线程(N1),放入空闲队列中。这些线程都是处于阻塞(Suspended)状态,不消耗CPU,但占用较小的内存空间。当任务到来后,缓冲池选择一个空闲线程,把任务传入此线程中运行。当N1个线程都在处理任务后,缓冲池自动创建一定数量的新线程,用于处理更多的任务。在任务执行完毕后线程也不退出,而是继续保持在池中等待下一次的任务。当系统比较空闲时,大部分线程都一直处于暂停状态,线程池自动销毁一部分线程,回收系统资源。 基于这种预创建技术,线程池将线程创建和销毁本身所带来的开销分摊到了各个具体的任务上,执行次数越多,每个任务所分担到的线程本身开销则越小,不过我们另外可能需要考虑进去线程之间同步所带来的开销。 构建线程池框架 一般线程池都必须具备下面几个组成部分: 线程池管理器:用于创建并管理线程池 工作线程: 线程池中实际执行的线程

地震勘探原理考试试题(C)参考答案

一、解释下列名词 1、反射波:由震源出发向外传播,经波阻抗界面反射到达接收点的波叫做反射波。 2、有效波:那些可用来解决所提出的地质任务的波为有效波或信号,如在进行反射波法地震勘探时,反射纵波为有效波。 3、干扰波:所有妨碍认辩、追踪有效波的其他波均属于干扰波范畴。 4、多次波:从震源出发,到达接收点时,在地下界面之间发生了一次以上反射的波。多次反射波、反射—折射波、折射—反射波和扰射—反射波等等统称为多次波。 二、填空 1.用于石油和天然气勘探的物探方法,主要有重力勘探,磁法勘探,电法勘探和地震勘探。其中,有效的物探方法是地震勘探。 2.用___人工______方法(如爆炸,敲击等)产生振动,研究振动在地下介质中__的传播规律,进一步查明__地下__地质构造和有用矿藏的一种__物探____方法,叫地震勘探. 3.地震勘探分___折射波_______地震法、____反射波_____地震法和____透射波___地震法三种.用于石油和天然气勘探主要是__反射波_____地震法,其它两方法用的较少. 4. 反射波地震勘探,首先用人工方法使__地表_____产生振动,振动在地下__介质___形成地震波,地震波 5 反射波到达地表时,引起地表的__振动_____.检波器把地表的__振动 _____转换成___电信号__,通过电缆把电振动输送到数字地震仪器里, 记录在磁带上的, 这就成为____数字磁带___地震记录. 6. 对数字磁带地震记录,用电子计算机进行地震资料____处理_____,得到各种时间剖面,再对时间剖面进行地震资料____解释______,做出地震_构造图___________,并提出____井位_____进行钻探,这样就完成了地震勘探工作. 7. 根据炮点__检波点____和地下反射点三者之间的关系,要__连续____追踪反射波,炮点和接收点之间需要保持一定的_____相互位置______关系.这种关系称为__观测系统______. 8.根据炮点和接收点的相对位置,地震测线分为__纵测线___和____非纵测线____两大类. 9.地震波属于__弹性波____波的一种,振动只有在弹性___介质____中,才能传播出去而形成波。 三、选择题 1 在反射波地震法勘探中,_____B.反射波.________就是有效波. 2 共反射点记录反映的是地下界面上____ A.一个点_________.

地震勘探原理

中国科学院测量与地球物理研究所 博士研究生入学考试大纲 《地震勘探原理》 本《地震勘探原理》考试大纲适用于中国科学院大学勘探地球物理学专业的博士生入学考试。地震勘探是地球物理勘探的一种重要方法,也是目前使用最为广泛、解决油气勘探问题最有成效的方法,主要内容包括地震波的运动学、地震波的动力学、地震资料采集和地震资料处理等内容。要求考生深入理解基本概念,系统掌握基本理论和方法,具有综合分析问题和解决问题的能力。 考试内容 (一)地震波的运动学 1、地震波的基本概念 2、时间场与视速度定理 3、反射与折射地震波的运动学 4、垂直时距曲线方程 (二)地震波的动力学 1、地震波的波动方程 2、介质对地震波传播的影响 3、弹性波在介质分界面上的反射与透射 4、薄层效应与地震面波 5、波动地震学与几何地震学的关系 (三)地震资料采集 1、地震勘探中的有效波与干扰 2、地震波的激发与接收 3、地震观测系统 (四)地震资料处理 1、地震资料校正与叠加 2、地震信号数字滤波 3、地震资料反褶积 4、地震偏移成像 5、地震波的速度 6、地震多次波压制 考试要求 (一)地震波的运动学 1、理解波前面、波射线、直达波、反射波、透射波、折射波、绕射波、多次波、斯奈尔

定律、惠更斯原理、正常时差和倾角时差的物理意义。 2、理解时间场、费马原理、时距图和视速度的物理意义。 3、掌握直达波、反射波、绕射波、多次波与折射波的时距曲线。 4、理解垂直时距曲线的概念,掌握直达波、反射波、透射波和折射波的垂直时距曲线。(二)地震波的动力学 1、掌握弹性波波动方程、平面波、球面波和克希霍夫积分公式,理解地震子波、P波和 S波的偏振原理。 2、理解地震波能流密度、几何扩散、吸收和频散的物理意义。 3、掌握Zoeppritz方程简化公式和反射系数公式。 4、理解薄层的定义与调谐效应、面波的主要类型与物理意义。 5、理解波动地震学与几何地震学的物理意义,掌握波动方程向程函方程的过渡条件与推 导过程。 (三)地震资料采集 1、理解地震有效波与干扰波的概念、地震干扰波的类型与特征。 2、理解地震波的激发震源类型、道间距的选择、空间假频、震源组合和检波器组合的概 念。 3、理解简单连续观测系统和多次覆盖观测系统的原理。 (四)地震资料处理 1、理解动校正、野外静校正、剩余静校正、折射静校正和共中心点叠加的原理。 2、理解滤波器的分类、子波的相位延迟、理想滤波器、理想低通滤波器、理想带通滤波 器、理想高通滤波器、伪门现象、吉普斯现象和二维视速度滤波原理。 3、理解最小平方反褶积、脉冲反褶积、预测反褶积、同态反褶积和地表一致性反褶积的 原理,提高纵向分辨率存在的困难,提高纵向分辨率与提高信噪比的关系,用预测反褶积消除鸣震干扰。 4、理解偏移概念、叠后与叠前偏移、时间与深度偏移、二维与三维偏移、Kirchhoff积 分偏移、F-K域波动方程偏移和有限差分法波动方程偏移优缺点。 5、理解速度分析、速度谱、速度扫描、真速度、层速度、平均速度、均方根速度、射线 速度、叠加速度的概念,理解各种速度之间的关系和层速度的计算。 6、理解多次波分类和表面多次波的常用压制方法。 主要参考书目 何樵登,地震勘探,北京:地质出版社,2009 陆基孟,地震勘探原理,北京:石油大学出版社,2006 牟永光等,地震数据处理方法,北京:石油工业出版社,2007 考试大纲编写人: 2013年7月

跟我学VS#语言编程技术——C#中的线程池Thread Pool技术及应用示例

1.1跟我学VS#语言编程技术——C#中的线程池Thread Pool技术及应用示例1.1.1C#中的线程池Thread Pool技术及应用示例 1、线程池Thread Pool技术概述 我们知道,大部分应用程序都是通过线程工作的,该线程等待一些引入的连接,一旦接收到一个连接,就会创建一个新的线程,并且要求这个线程服务于这个新的连接。 在此种工作方式下,当线程比较多的时候,系统的开销将会相当大。减少系统开销的一个方法就是使用一个线程池来处理,特别是关于在服务应用程序中使用线程的问题。 在服务器端的应用程序中几乎都采用了“线程池”技术,这主要是为了提高系统效率。因为如果服务器对应每一个请求就创建一个线程的话,在很短的一段时间内就会产生很多创建和销毁线程动作,导致服务器在创建和销毁线程上花费的时间和消耗的系统资源要比花在处理实际的用户请求的时间和资源更多。线程池就是为了尽量减少这种情况的发生。 2、线程池的工作原理 所谓线程池,就是在内存中等待工作的线程,系统会根据工作的情况,自动地创建并管理新的线程。其工作原理如下图所示:

3、ThreadPool类 在.NET中,通过System.Threading.ThreadPool类,每个进程都自动带有一个线程池,而且每个进程至多只能有一个线程池,可以在多个不同的行为间共享线程池。 上面我们已经知道了线程池主要用于服务引入的连接,但同时也还可以周期性地进行其它方面的服务,比如检查服务器上的磁盘空间,确保服务器高速运行,检查电子邮件以及服务客户连接等等。 其实,线程池可以使线程变得更容易,很明显还需要处理同步问题,但我们不需要真实地创建线程,.NET会帮助我们做这些。

地震勘探原理作业习题

地震勘探原理 1.什么是各向同性和各向异性介质?什么是的均匀介质和非均匀介质?什么是层状介质和连续介质? 2.什么是应力?简述正应力和剪切应力的物理含义。 3.什么是应变?简述正应变和剪切应变的物理含义。 4.试叙述杨氏弹性模量、剪切模量及泊松比的物理含义。 5.试叙述纵波和横波的传播特点。 6.设流体中的压强为P =Kθ,试证明流体中的纵波满足以下方程 01222=??-?t P V P p , ρK V p = 7.解释名词: (1)波前和波尾; (2)振动图和波剖面;(3)波的球面扩散; (4)同相轴和等相位面;(5)时间场和等时面;(6)频谱分析 8.什么叫视速度定理? 9.从反射和折射波形成的机制,分析反射和折射波形成的条件是什么? 10.试述面波传播的特点及频散现象? 11.一个三层模型如下图所示, 如果波从第一层顶界面出发振幅为A 0,法线入射波到第二层,试写出波在第三曾底界面上反射波返回至第一层顶界面时的振幅值。模型中R 表示反射系数;h 表示地层厚度;α表示吸收系数。 12.地震波在薄层介质中传播的动力学特点如何? 13.讨论绕射的产生过程。 14.什么是大地滤波作用? 15.一个以α=300出射的反射波的视周期T *=40ms ,视波长λ*=250m 。试计算其视频率f *和介质中的波速。当视周期不变,出射角变为200时,f *,λ*、、k *、v * 有无变化?若有变化,应当变为多少? 16.若脉冲g 1(t)的谱为G 1(f),而脉冲g 2(t)=g 1(at), a 为常数,试求g 2(t)的谱G 2(f),并分析其结果的物理意义。 试绘出点震源激发的p 波、SH 波和SV 波的振动方向示意图 17.假设声波、面波、直达纵波沿界面传播的视速度分别为350、700、1400(m/s),试在同一直角坐标系中画出它们的时距曲线。 18.水平反射界面以上介质的传播速度为2000m/s ,在同一直角坐标系中,画出h=500, 1000, 1500, 2000 m 的反射波时距曲线。 19.水平反射界面的埋藏深度为2000m ,在同一直角坐标系中画出v 1=1500, 2000, 3000, 4000m/s 时反射波的时距曲线。 20.简述“平均速度”、“均方根速度”、“叠加速度”、“射线速度”等的定义及R 1 R 2 R 3

相关文档
相关文档 最新文档