摘要:
2024-05-27 思考-日记-问题点
问题点:
一. 同步接口的并发问题
- 接口调用是在客户端的的上下文,无论是线程,协程,是在客户端的执行上下文里面
- 同步的话,是同步客户端的调用接口的上下文,阻塞的是客户端的上下文,这个和此前服务器,基于网络信息的句柄不一样
- 但是所谓的接口调用并发,所谓的并发,对于客户端而言,这个场景怎么理解呢?
- 这就是对于客户端的上下文来说的,客户端的上下文,必定是在线程中,而不是在协程中,对于阻塞在io上的调用,客户端使用协程是不适用的,所以必然是线程。
- 那么所谓客户端的调用的并发,就可以理解成,客户端多个线程在调用同一个接口,每个客户端的线程不能互相阻塞。以这样的场景来进行理解。
- 那么就是driver提供的接口,可以被多线程并行的访问,一个线程访问一个driver对外的接口时,当阻塞在这个接口等待时,另一个独立的线程访问同样的driver接口,可以正常访问,而不是被阻塞等待。
- 这就导致对于driver接口的设计,对于同步的接口,也是要以单个线程的执行上下文来设计。
二. 使用vh的cfg的dll导致崩溃
- 使用dll的cfg的纯c函数,返回一个c++的类的对象
- 使用这个对象的接口进行函数接口调用loginDB的时候,导致崩溃,错误为地址访问错误/冲突。
- 但是使用另外的一个dll,做query的时候,由于是纯c函数,却能正常使用,并且逻辑也正确。
- 那么就是dll的纯c的接口调用,与使用c++的接口调用,是不同的,也就是动态库的ABI的使用上的不同,否则在使用cfg的dll的纯c接口返回类的对象的时候,就会崩溃。
- 那么有这么几种情况:1. cfg的dll的vs的版本,与现在做工程的vs2019的工程不同,此前使用的是vs2010。 2. c++的类的接口,导出的dll的ABI接口,和现在的工程的使用的方式不同。 这些需要询问下VH的cfg的dll的开发者,如果正确的使用。