# TSO 任务：流程

![`smart`](TSOAssignmentProcess_en_001_20220509.png)

------------------------------------------------------------------------------
TiDB 服务器中的 PD 客户端线程处理与 PD（放置驱动程序）服务的所有通信。该模块负责从 PD 批量获取 TSO（时间戳 Oracle）。该过程的工作原理如下：

1. 当事务（TSO请求者）需要请求TSO时，它会将请求发送给PD客户端模块，该模块会立即向请求者返回一个tsFuture对象。
2. 请求者然后缓存tsFuture对象，并开始执行SQL解析和编译。一旦完成，请求者调用tsFuture对象上的wait方法等待TSO返回。
3. 同时，PD客户端通过gRPC从PD（放置驱动程序）服务异步获取TSO。请注意，对于每个TSO请求，不仅仅发送一次请求，而是如果在非常短的时间段内同时到达大量请求，则会发送批量请求。如果TSO请求在较长时间内接收，则会一次一个地发送请求给PD。
4. 一旦PD客户端收到PD发来的TSO，它就会尝试将TSO返回给对应的请求者。如果请求者正好在这个时候调用wait方法，它将收到TSO，否则它将等待直到tsFuture对象被信号化。

总而言之，TSO 分配是 TiDB 集群内的一个异步过程。