- 浏览: 12682 次
最新评论
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/
发表评论
-
uboot的配置问题对\include\configs\[boardname].h的修改
2012-01-20 00:53 1417uboot的配置问题对\include\configs\[bo ... -
windows 7 的 MBR 分析
2012-01-20 00:53 840windows 7 的 MBR 分析 2010年10月04日 ... -
OpenNMS扩展 - 事件配置
2012-01-20 00:53 845OpenNMS扩展 - 事件配置 2011年04月24日 ... -
Process and Thread
2012-01-20 00:53 558Process and Thread 2011年02 ... -
诬凹沃官燠喷闳
2012-01-19 08:42 476诬凹沃官燠喷闳 2012年01月06日 U辙趴“ ... -
???
2012-01-19 08:42 560??? 2012年01月10日 ... -
是傻频日志呵阡啄凛仄
2012-01-19 08:42 554是傻频日志呵阡啄凛仄 2012年01月09日 刘 ... -
我的日志
2012-01-19 08:42 660我的日志 2012年01月14日 护卫队的战士C ... -
PHP DDOS攻击的处理办法
2012-01-15 19:52 502PHP DDOS攻击的处理办法 ... -
手把手教你如何搭建PHP本地测试环境和MYSQL数据库的建立和使用
2012-01-15 19:52 839手把手教你如何搭建PHP ... -
centos 内核升级(2.6.18-194.el5升2.6.30)
2012-01-15 19:52 804centos 内核升级(2.6.18-194. ... -
慢慢研究
2012-01-15 19:52 623慢慢研究 2011年12月24日 ... -
Linux集群的安装与并行计算
2012-01-15 19:52 788Linux集群的安装与并行 ... -
自己写的一个文件上传的类iteye技术网站
2012-01-11 12:04 626自己写的一个文件上传的类iteye技术网站 2011年07月 ... -
How Tomcat Works 读书笔记(第四章)
2012-01-11 12:04 413How Tomcat Works 读书笔记(第四章) 201 ... -
lucene索引格式
2012-01-11 12:04 563lucene索引格式 2011年07 ... -
shell小结(10)
2012-01-11 12:04 549shell小结(10) 2011年07月01日 #!/b ... -
compass搜索
2012-01-11 12:04 502compass搜索 2011年07月01日 compas ...
相关推荐
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 的移植。