为客户机/服务器连接指定侦听和轮询线程

启动数据库服务器时,oninit 进程将为使用 onconfig 文件中的 DBSERVERNAME 和 DBSERVERALIASES 参数指定的每个 dbservername 启动内部线程,这些线程称为侦听线程。要为这些数据库服务器名条目中的每一个指定侦听端口,请在 sqlhosts 中为其指定 hostname service name 条目的唯一组合。例如,下表中显示的 sqlhosts 文件条目或注册表项将使数据库服务器 soc_ol1 为主机或网络地址 myhost 上的 port1 启动侦听线程。
表 1. 每个侦听端口的侦听线程
dbservername nettype hostname 服务名
soc_ol1 onsoctcp myhost port1

侦听线程打开端口并请求指定接口/协议组合的轮询线程之一监视客户机请求的端口。轮询线程为正在使用的连接运行于 CPU 虚拟处理器或网络虚拟处理器中。有关轮询线程数的信息,请参阅指定联网虚拟处理器数

有关如何指定接口/协议组合的轮询线程是在 CPU 虚拟处理器中运行还是在网络虚拟处理器中运行的信息,请参阅在 CPU 或网络虚拟处理器上运行轮询线程以及 GBase 8s 管理员参考 中的 NETTYPE 配置参数。

当轮询线程从客户机接收到连接请求,它会将请求传递给该端口的侦听线程。侦听线程将认证用户,建立到数据库服务器的连接,然后启动 sqlexec 线程,该线程是为客户机执行主处理的会话线程。下图说明了侦听线程和轮询线程在建立与客户机应用程序的连接时的角色。

图: 轮询线程和侦听线程在与客户机连接时的角色


在此图之前的段描述了此图的内容。

轮询线程等待来自客户机的请求,并将这些请求放在共享内存以便由 sqlexec 线程处理。 对于网络连接,轮询线程将消息放在共享内存全局池中的队列中。然后,轮询线程将唤醒客户机的 sqlexec 线程以处理该请求。只要可能,sqlexec 线程都会直接写回客户机而无需轮询线程的帮助。通常,轮询线程从客户机读取数据,然后 sqlexec 线程将数据发送到客户机。

仅限 UNIX: 对于共享内存连接,轮询线程将该消息放在共享内存的通信部分中。
下图说明了轮询线程和 sqlexec 线程在与客户机应用程序通信时执行的基本任务。

图: 轮询线程和 sqlexec 线程在与客户机应用程序通信时的角色


在此图之前的段描述了此图的内容。