CUBRID 中的线程模型
2010年11月15日
作者:于淼
本文旨在说明 CUBRID 这一数据库引擎中的线程模型。将分别从客户端和服务器端两个视角描述一个请求是被 CUBRID 响应的过程。
下图描述了整体的线程结构:
在描述请求处理过程之前有必要先说一下各个线程所扮演的角色(以下说明都是基于Linux平台,Windows下的表现会略有不同,文后将作以说明)。如图所示,CUBRID 服务器端共有2个进程: 1. Cub_master 对客户端来讲只有master是可见的。为了与cub_server 通信,客户端首先与cub_mater建立连接。Cub_master将客户端socket传递给cub_server 并由其保存在css_Conn_array队列中。
2. Cub_server
Cub_server以多线程的形式进行分工。
a) Master thread
处理来自master进程的请求。主要负责以下三件事情:
(1) 检测cub_master进程的状态
(2) 处理新连接请求
(3) 处理shutdown请求
b) Worker thread
客户端请求的真正执行者。
c) Daemon thread
CUBRID 中共有6个守护线程,分别负责以下工作:
(1) Dead lock detection
(2) Checkpoint
(3) Oob-handler
(4) Page flush
(5) Flush control
(6) Log flush 下面以请求如何被处理的流程来说明各个进程线程之间是如何协同工作的。
1. 当一个新的客户端试图与server建立连接时,它需要首先与cub_master建立连接。
2. Cub_master将与客户端进行通信的套接字传递给cub_server中的master thread。
3. master_thread在接到新连接请求之后,首先从css_Conn_array空取出一个空闲的conn_entry将此套接字放入其中,生成一个完整的conn_entry(除套接字以外,还包括client_id, transaction_id, request_id等信息),并将其设置为active状态。
4. master_thread利用步骤3中生成的conn_entry 生成一个新的job_entry 放入 css_Job_queue当中,并设定其handle_function 为connection_handler。完成之后唤醒一个正在等待的worker_thread
5. worker_thread被唤醒后取回job_entry, 开始执行connection_handler函数。此函数的功能就是利用conn_entry中套接字与客户端进行通信,接收它的request,生成新的job_entry,放入css_Job_queue,唤醒另外一个worker_thread。此时job_entry的handle_function 为request_handler
6. 步骤5中被唤醒的worker_thread开始执行request_handler。至此,客户端的request得到响应。执行完成后,直接将结果reply给客户端。一个requesst完成。
7. 此客户端再次发送request时跳过步骤1~4,重复步骤5、6,直到客户端退出。 说明:
在Windows平台下,无法在进程间传递描述符,所以步骤2将改变为cub_master将master_thread的port号返回给client,client重新建立一个到此port口的连接。
参考资料: 2. CUBRID on sourceforge - http://sourceforge.net/projects/cubrid/
发表评论
-
运行MeeGo SDK 的windows版本
2012-01-20 09:21 725运行MeeGo SDK 的windows版本 2010年11 ... -
关于如何学好游戏3D引擎编程的一些经验
2012-01-20 09:21 875关于如何学好游戏3D引擎编程的一些经验 2010年09月16 ... -
软件实现三维地图引擎的研究
2012-01-20 09:21 914软件实现三维地图引擎 ... -
OpenNMS扩展 - 事件配置
2012-01-20 09:21 572OpenNMS扩展 - 事件配置 2011年04月24日 ... -
黄氏礼制文化
2012-01-19 14:23 739黄氏礼制文化 2011年07 ... -
中古史研究的新视角:礼制、宗教与民间社会
2012-01-19 14:23 594中古史研究的新视角:礼 ... -
礼制”思想的阐述
2012-01-19 14:23 640礼制”思想的阐述 2010 ... -
实训报告
2012-01-19 14:23 611实训报告 2011年12月30日 ... -
小奴妹作文集(三)
2012-01-19 14:22 1752小奴妹作文集(三) 2011 ... -
网络游戏脚本及编程
2012-01-17 04:11 1112网络游戏脚本及编程 2010年07月18日 网络游戏脚本 ... -
3dmax简介
2012-01-17 04:11 5763dmax简介 2011年03月22日 3DMAX ... -
3D MAX 常见小问题集合三
2012-01-17 04:10 6443D MAX 常见小问题集合三 ... -
ParticleIllusion基础教程:界面介绍
2012-01-17 04:10 932ParticleIllusion基础教程: ... -
opengl
2012-01-17 04:10 697opengl 2010年11月17日 ... -
各种文件后缀名与打开方式大全
2012-01-16 03:01 892各种文件后缀名与打开 ... -
各种文件后缀名与打开方式大全
2012-01-16 03:01 649各种文件后缀名与打开方式大全 2009年11月27日 ... -
Flash&Flex大全
2012-01-16 03:01 601Flash&Flex大全 2011年02月24日 ... -
WPF是什么
2012-01-16 03:01 614WPF是什么 2009年07月25日 要赢得世界,必须在 ... -
FLASH常用的120个代码分析详解[三].
2012-01-16 03:00 594FLASH常用的120个代码分析详解[三]. 2011年05 ...
相关推荐
Cubrid 数据库管理员手册,Cubrid是韩国开发的一个开源的数据库,本手册为管理员使用手册。 网址:http://www.cubrid.com/
ngrinder的linux32位监控工具CUBRID-9.3-latest-linux.i386.sh
tables_cubrid.sql
Laravel开发-laravel-cubrid Laravel的Cubrid数据库连接程序
CUBRID 是一个全面的 GPL/BSD 开源关系数据库管理系统,针对 Web 应用程序进行了高度优化。 CUBRID 正在用 C 语言开发。包括 HA、数据库分片、在线备份和企业就绪功能。 Node.js、JDBC、PHP/PDO、ODBC/OLEDB/.NET、...
这是 CUBRID 引擎项目 (sf.net/projects/cubrid) 的衍生项目,并开发 CUBRID API 以获得更好的支持。 该项目涵盖了 JDBC、PHP、ODBC、OLEDB、Ruby、Python 等。更多信息,请访问我们的网站:http://cubrid.org。
请参阅http://www.cubrid.org/cluster。 CUBRID Cluster是一个开源集群DBMS,具有较高的可扩展性,包括全局架构,分布式分区和负载平衡功能。 它是CUBRID项目的衍生项目,并得到NHN的支持。
code-story-http.zip,这是我们能想到的最简单、最快、成熟的http服务器
ngrinder的linux64位监控工具,用于监控目标服务器的性能表现
该项目是一个用于显示 CUBRID 数据库设计模型的 Web 应用程序。 它会在您的浏览器中显示表格及其之间的关系。 它是使用 PHP 和 Silverlight 开发的。
这个项目是关于开发一个 CUBRID 数据库的 web shell 接口,类似于 MongoDB web shell。 主要目标是以类似于 CSQL shell 的方式提供对数据库的轻松访问。
CUBRID是针对Web应用程序高度优化的全面的GPL / BSD开源关系数据库管理系统。 CUBRID正在用C开发。包括HA,数据库分片,在线备份和企业就绪功能。 可以使用Node.js,JDBC,PHP / PDO,ODBC / OLEDB / .NET,Ruby,...
该项目旨在通过开发 CUBRID Java 存储过程来增强 CUBRID 功能。
CUBRID:CUBRID是针对Web应用程序高度优化的全面的开源关系数据库管理系统
发现可以改进的地方以及修改和提交代码来识别错误纠正整个代码中的错别字,包括注释粗斜纹自从2008年11月以开源许可(DBMS引擎:GPL v2,界面:BSD)发布源代码以来,CUBRID继续内部开发和开放开发,并在发布新版本...
这是一种开源数据库 如果以后mysql 不行了 用这个还可以支持一段时间
该项目的目标是针对其他知名开源数据库(例如 MySQL 或 PostgreSQL)衡量 CUBRID 数据库的性能。 将使用PHP和Java API接口库进行测量。
CUBRID 的 PHP MySQL 兼容接口。 这个 PHP 接口通过提供 MySQL PHP 函数和 SQL 兼容语法,促进了 MySQL 应用程序到 CUBRID 的移植。