美文网首页
openGauss源码#connection_id

openGauss源码#connection_id

作者: upup果 | 来源:发表于2021-01-06 08:50 被阅读0次

今天看了MOT中connection_id.h和connection_id.cpp,主要是可重用connection_id的逻辑实现.connection的标识符类型为typedef uint32_t ConnectionId.主要函数如下:
1.InitConnectionIdPool(uint32_t maxConnections):初始化可重用connection标识符池。
  首先初始化一个自旋锁,然后分配一个保存连接ID的数组,数组大小的计算为:CONNECTIONS_PER_WORD=64,  
  connectionIdArraySize=(maxConnectionCount + CONNECTIONS_PER_WORD - 1) / CONNECTIONS_PER_WORD;
  计算allocSize = sizeof(uint64_t) * connectionIdArraySize 并分配内存(uint64_t ).
2.AllocConnectionId:为当前连接分配一个可重用的连接标识符
   首先获取自旋锁,计算connectionId = CONNECTIONS_PER_WORD * arrayIndex(数组下标) + bitIndex(不为1的位下标); 
  并标记这一位已经使用,释放自旋锁
3.FreeConnectionId:为当前会话释放可重用的连接标识符。这个标识符可以被另一个连接重用。当一个会话完成它
  的执行时,它必须调用这个函数
,这样它的连接标识符就可以返回到可重用的连接标识符池中。
  首先根据connectionId计算出arrayIndex和bitIndex,获取自旋锁,将这一位标记为free,currentConnectionCount自
  减1,最后释放自旋锁.
4.其他函数,如GetMaxConnectionCount,GetCurrentConnectionCount,IsConnectionIdFree等都比较简单,不展开介绍了

相关文章

网友评论

      本文标题:openGauss源码#connection_id

      本文链接:https://www.haomeiwen.com/subject/hvymoktx.html