对于运行在线程模式下的ASE 15.7 Server,ASE安排任务到线程池(thread pool)中的线程(thread)。每个线程池有一个调度器(scheduler),它安排任务到自己所管理的线程池中的threads。任务调度器把user tasks和service tasks调度到engine threads(又叫做multiplexed threads);把system tasks调度到RTC threads上执行。
包含引擎的线程池叫做引擎池(engine pools,又叫做engine thread pools),引擎池用来执行有KPID(kernel process id)的ASE任务(比如user tasks和service tasks)。ASE为引擎池中的每一个线程安排一个引擎。
运行在线程模式下的ASE支持两种类型的线程:
1. 引擎线程(Engine threads),又叫做多路化线程(Multiplexed threads)
(1)引擎线程(Engine threads)用于数据库查询处理,它们可以在多个数据库进程(process,又叫做
task,两个概念是等价的)之间共享 。
(2)多路化线程(Multiplexed threads,又叫做引擎线程)执行的任务之间可以共享(就好像多个进程可以
共享一个CPU资源一样)。用户任务(user tasks)和服务任务(service tasks)都是多路化的(又叫做多路化
任务,Multiplexed tasks)。
(3)多路化任务(Multiplexed tasks)在运行了一个指定的时间片(timeslice)或是阻塞之后必须让出线程
资源,以便多路化线程能够用于执行其他任务。
(4)多路化线程与进程模式下的引擎概念(即一个多路化线程即是一个引擎)。
2. RTC线程(Run to completion threads)
(1)RTC线程用于执行系统任务(system tasks),它不能被多个系统任务共享。
(2)一个RTC线程运行一个系统任务,直到该系统任务完成才能用于执行其他系统任务,它不受ASE 通常
的任务调度机制调度。
(3)RTC线程在运行系统任务时,如果任务没有执行完成是不会被调度器中断以执行其他系统任务的;系
统任务在RTC线程上运行时也不会由于定义的时间片到达或是由于阻塞等原因而让出引擎资源。.
(4)如果所有的RTC线程当前都在执行系统任务,那么新的RTC任务需要等待。
线程池(thread pool)是一组CPU资源的集合,它包含用于执行ASE Tasks(又叫做Processes)的线程(Threads)。ASE Server包含系统创建的以及由用户创建的线程池。所有系统创建的线程池名称以"syb_"作为前缀,例如:syb_default_pool、syb_system_pool、syb_blocking_pool。用户创建的线程不能以"syb_"作为前缀,并且也不能为用户创建的线程池指定类型,用户创建的线程池的类型只能是multiplexed。
ASE Server包括如下三个系统创建的线程池:
1. syb_default_pool - 缺省的引擎线程池
在syb_default_pool系统线程池中的每一个线程是一个引擎。所有用户任务和服务任务(比如
housekeeper tasks)能够运行在这个线程池上。此外,通过创建用户线程池,也可以让一些任务不运行在
syb_default_pool线程池而运行在创建的用户线程池上。
2. syb_system_pool -是一个RTC线程池,用于执行系统任务
在syb_system_pool系统线程池中,每一个线程专门用于执行一个系统任务。这个线程池至少应包含3个
线程:一个用于执行系统时钟任务,一个用于异步信号处理任务,一个用于处理I/O。
3. syb_blocking_pool
这个线程池也是一个RTC线程池,ASE使用这个线程池为多路化任务处理阻塞调用请求 (blocking call
requests from multiplexed tasks), 所谓阻塞调用请求是指多路化任务发出的操作系统调用可能会引发
其阻塞不可接受的很长时间。通常情况下在syb_blocking_pool线程池中的线程只会消耗很少的CPU资源。
可以使用create thread pool、alter thread pool、drop thread pool、sp_helpthread和monThreadPool表管理和查看线程池。
阅读(1533) | 评论(0) | 转发(0) |