概述:线程如何工作

每个 CICS 事务需要拥有自己的线程才能访问 DB2。

当事务需要线程时,将在应用程序发出其第一个 SQL 或命令请求时创建这些线程。 事务使用线程来访问由 DB2管理的资源。 当事务不再需要线程时,由于该事务已访问其需要使用的所有资源,因此将释放该线程 (通常在同步点完成后)。 它需要处理器资源来创建线程,因此在释放线程时, CICS DB2 连接设施会检查另一个事务是否需要线程。 如果另一个事务正在等待线程,那么 CICS DB2 连接设施将复用该事务的现有线程来访问 DB2。 如果任何事务不再需要该线程,那么将终止该线程,除非您已请求对其进行一段时间的保护 (保留)。 如果另一个事务在该时间段内请求了受保护线程,那么将复用该线程; 否则,将在保护时间到期时终止该线程。

有不同类型的线程,您可以对可以在任何时间处于活动状态的每种类型的线程的数量设置限制。 这可防止整体 CICS DB2 连接因工作而超负荷。 特殊类型的线程用于使用 DSNC 事务发出的 DB2 命令,您还可以为具有特定需求 (例如需要快速响应时间的事务) 的 CICS 事务定义特殊线程。 您可以定义事务在没有更多可用类型的线程时必须执行的操作-可以等待正确类型的线程可用; 可以使用通用线程 (称为池线程); 也可以异常终止。

CICS DB2 连接设施提供的线程类型为:
命令线程
命令线程由 CICS DB2 连接设施保留,用于使用 DSNC 事务向 DB2 发出命令。 它们不用于对 CICS DB2 连接设施本身执行操作的命令,因为这些命令不会传递到 DB2。 当命令线程不可用时,命令会自动溢出到池,并使用池线程。 命令线程在 DB2CONN 定义的命令线程部分中定义。
条目线程
入口线程是专门定义的线程,旨在用于具有特殊需求的事务,例如需要快速响应时间的事务或具有特殊记帐需求的事务。 您可以指示 CICS DB2 连接设施向特定 CICS 事务提供入口线程。 您可以定义不同事务所需的不同类型的入口线程,并且可以设置这些类型的每个入口线程的数量限制。 如果允许事务使用条目线程,但没有合适的条目线程可用,那么事务可以溢出到池并使用池线程,或者等待合适的条目线程,或者异常结束,如您在条目线程的定义中所选择的那样。

可以保护特定数量的每种类型的入口线程。 当释放条目线程时,如果它受到保护,那么不会立即终止它。 它将保留一段时间,如果另一个 CICS 事务在该时间段内需要相同类型的条目线程,那么将复用该线程。 这将避免创建和终止每个事务的线程所涉及的开销。 未受保护的条目线程将立即终止,除非 CICS 事务在释放时等待使用该线程。

使用 DB2ENTRY 定义来定义条目线程。

池线程
池线程用于所有未使用条目线程或 DB2 命令线程的事务和命令。 池线程用于低卷事务,以及无法获取条目线程或 DB2 命令线程的溢出事务。 如果没有 CICS 事务正在等待使用池线程,那么该池线程将立即终止。 池线程在 DB2CONN 定义的池线程部分中定义。

有关如何创建,使用和终止不同类型的线程的更详细信息,请参阅 如何创建,使用和终止线程

每个线程都在属于 CICS的线程任务控制块 (线程 TCB) 下运行。 CICS 和 DB2 都具有链接到线程 TCB 的连接控制块。 它们使用这些连接控制块来管理 DB2中的线程,并相互传递有关该线程的信息。 DB2 连接控制块控制 DB2中的线程。 CICS 连接控制块 (称为 CSUB) 充当指向 DB2 连接控制块的指针,并包含 CICS 在需要线程时调用 DB2 连接控制块所需的信息。 DB2 调用这些连接控制块 "代理程序结构"。

当 CICS 连接到 DB2 子系统时,将自动启用与 CICS DB2 任务相关的用户出口 (为每个任务调用 DB2 的模块) 作为开放式 API ,以便它可以使用开放式事务环境 (OTE)。

在本文档中, CICS DB2 连接设施用于运行线程的两种类型的 TCB ,打开的 TCB 和子任务 TCB 都称为 "线程 TCB"。 在许多情况下,两种类型的线程 TCB 的不同性质不会导致 CICS DB2 连接的操作存在任何差异。 如果不同类型的线程 TCB 确实导致 CICS DB2 连接的行为不同,那么将区分这两种类型。 有关线程 TCB 的更多技术信息,请参阅 线程 TCB (任务控制块)