黑马程序员技术交流社区

标题: 关于SQL server中的线程与纤程的问题 [打印本页]

作者: 心弦上的景致    时间: 2013-1-27 09:41
标题: 关于SQL server中的线程与纤程的问题
线程是调用系统线程执行并发任务
但是纤程是怎么回事 它的运行机制是具体怎么实现的

我希望高手从更底层的观点帮助我剖析一下  菜鸟围观 求高手
作者: 廖成    时间: 2013-1-27 09:56
本帖最后由 廖成 于 2013-1-27 10:07 编辑

纤程  为了减少上下文切换,引入纤程的概念,可以在SQL Server中启用纤程,纤程是线程的子模块,纤程由运行在用户模式下的代码管理,所以切换纤程比切换进程的代价少的多,因为纤程模式不需要在将用户模式和内核模式中切换,而切换线程则需要这种转换。

两者的区别  SQL Server管理纤程的调度,而OS管理线程的调度;线程模式里 SQL Server为每个并发用户创建配一个线程,而纤程模式中 SQL Server为每个CPU分配一个线程,并为每个并发用户创建配一个纤程,一个线程中可以有多个纤程,纤程只在线程里切换,不用上下文切换实现线程的是操作系统内核。操作系统清楚地知道线程的情况,并且根据操作系统定义的算法对线程进行调度。纤程是以用户方式代码来实现的,内核并不知道纤程,并且它们是根据用户定义的算法来调度的。由于你定义了纤程的调度算法,因此,就内核而言,纤程采用非抢占式调度方式。                                                               
下一个问题是,单线程可以包含一个或多个纤程。就内核而言,线程是抢占调度的,是正在执行的代码。然而,线程每次执行一个纤程的代码—你决定究竟执行哪个纤程(随着我们讲解的深入,这些概念将会越来越清楚)。  当使用纤程时,你必须执行的第一步操作是将现有的线程转换成一个纤程。   

当对纤程的执行环境进行分配和初始化后,就可以将执行环境的地址与线程关联起来。该线程被转换成一个纤程,而纤程则在该线程上运行。        
                     
SQL Server对线程和纤程的管理

SQL Server既可以为用户连接维护一个线程池,也可以维护一个纤程池(如果设置了纤程模式,则系统只维护纤程池,不在是线程池) 在连接池中,线程和纤程都看作工作纤程。

当一个语句需要SQL Server执行时:

                     






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2