在 Windows 和 Linux 上,工作线程是使用称为纤程的轻量线程来实现的。使用纤程的实现使工作线程能以合作方式自行调度,而不是由操作系统线程调度器优先进行调度。这样做的结果是纤程之间的上下文切换可以受到更好的控制。数据库内核会以最大化处理器亲和度为目标来调度纤程,并严格控制各个工作线程的执行优先级。
由于纤程不依赖操作系统调度程序,因此在其等待某个其它活动完成时,必须显式地将控制权让与另一个纤程。例如,如果某个纤程上的任务需要等待 I/O 操作完成,则当前纤程会将控制权让与另一个纤程。托管原始纤程的线程可以立即拾取另一个纤程并开始执行,而不需要进行内核上下文切换。如果某个纤程产生阻塞但不让出控制,则它会阻塞托管它的线程,并禁止其它纤程在该线程上运行。如果有多个线程在托管纤程,则只有托管等待中纤程的线程会被阻塞:其它线程仍可自由地运行纤程。
在 Windows 和 Linux 的平台上,所创建的纤程数量至少要与网络数据库服务器最大并发数设置所要求的数量(即 -gnh 选项所指定的数量)相同。服务器执行期间,网络数据库服务器会使用与当前服务器进程并发水平相对应的线程子集。操作系统必须为各个纤程保留地址空间以用于堆栈。每个纤程所需的堆栈数量取决于 -gss 服务器选项。
网络服务器用来执行堆栈所需的地址空间数量与最大进程并发水平成比例。
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |