tquic 线程疑问 #198
-
适用C API写了一个demo: |
Beta Was this translation helpful? Give feedback.
Replies: 2 comments 9 replies
-
对于您的问题,基于TQUIC的设计和文档描述,以下是对您的疑问的解答:
关于您遇到的 总的来说,虽然TQUIC设计为支持多线程环境,但是直接从多个线程操作TQUIC的API需要小心处理,以避免线程安全问题。建议将所有TQUIC相关的操作都封装在一个安全的机制中,确保它们在TQUIC的主事件循环线程中执行。 |
Beta Was this translation helpful? Give feedback.
-
@iyangsj 从log看, 客户端在stream readable 回调中读出数据后, 如果不立马write什么业务数据,那个计时器就设置timeout 为5秒了(而主逻辑就是由这个计时器驱动的)。 再后面就算call stream_write, 也并不会驱动 tquic执行quic_endpoint_process_connections逻辑。 所以,这里的疑问是: stream_write不会主动驱动tquic逻辑, 需要用户手动call quic_endpoint_process_connections 吗? |
Beta Was this translation helpful? Give feedback.
对于您的问题,基于TQUIC的设计和文档描述,以下是对您的疑问的解答:
TQUIC内部实现都是在一个单线程中吗?
quic_stream_xxx 接口不能在tquic本身所在线程的其他线程中调用吗?
quic_stream_xxx
接口可能会引起线程安全问题,因为TQUIC的状态管理和网络IO操作通常都假定在单个线程(即其主事件循环线程)中执行。如果需要从其他线程调用这些接口,应该采取措施确保这些调用在TQUIC的主线程中安全执行。这可以通过使用线程安全的队列将操作从其他线程发布到TQUIC的主线程,或者使用其他同步机制来实现。关于您遇到的
quic_stream_write
返回-6的问题,这可能是因为从非主线程调用导致的线程安全问题,或者是因为流的状态不允许写入操作。建议检查TQUIC的日志以获取更详细的错误信息,并确保所有对TQUIC API的调用都遵循线程安全的原则。总的来说,虽然TQUIC设计为支持多线程环境,但是直接从多个线程操作TQUIC的API需要小心处理,以避免线程安全问题。建议将所有TQUIC相关的操作都封装在一个安全的机制中…