一次偶然的机会debug代码瞅了一眼Mysql客户端的代码(Java版本),最引发我兴趣的是这一句:
execSQL是一个非常重要的方法,所有SQL语句的最终都是交由这个代码来实现的;这个方法被一个connectionMutex锁(这个锁其实就是Connection对象自己,Mysql客户端通过使用了“反射”所以不能直接使用this)包裹着这就意味着在同一时刻一个Mysql连接只能执行一条SQL语句。
带着疑问我走读了这段代码,画一幅图
MysqlIO是负责网络通讯的底层类,使用的是Java是BIO通讯属于“标准”的TCP客户端写法。它内部有三个重要的成员变量
mysqlConnection是一个Socket类型
mysqlOutput是一个BufferedOutputStream类型
InputStream是一个InputStream类型(Mysql做了一点封装理解成BufferedInputStream也没什么问题)
这三个成员变量的初始化是在MySqlIO的构造函数完成的,当执行SQL语句的时相当于:
|