我有一个应用程序,我需要查询数据库以获取/放置信息。我无法同步执行,因为它会阻止我的整个过程,直到函数返回。
基本上我有一些函数可以在某些点运行一个或多个查询。
fun
stuff1
stuff2
stuff3
query1
stuff4
query2
stuff5
我可以在单独的线程中启动这些功能,但是我必须锁定所有内容以阻止比赛(我认为锁定可能很慢?)
我可以异步启动查询并监视它们但是我必须拆分我的函数并使用在qouery结束时运行的回调
我对一般解决方案感兴趣,但我的平台是POSIX,数据库(不幸的是)是mysql。
你会做什么?你会怎么处理这个?感谢您的时间。
答案 0 :(得分:1)
取决于情况有多复杂。在一个简单的场景中,将多个函数分解为查询的回调将会起作用 - 并且是一个有效的解决方案。在更复杂的场景中,您需要一些依赖注入框架,如spring。
答案 1 :(得分:1)
有些模式已经知道并且已经使用了很长时间,我相信它们没有改变。
EventWaitHandle
可以等待多个线程,并在完成所有操作后通知。Task<T>
链接,这使得读取和编写代码变得更加简单。 jquery现在提供promise
,这是同样的事情。答案 2 :(得分:1)
您可以创建一个处理数据库查询队列的新线程。该线程将包含一个列表,其中包含要对数据库执行的下一个操作,并且可以通过以下函数访问:MyDatabaseQueue.PerformActionWhenFree(Action a,Callback callmebackwhendone)。该线程将负责一次创建一个查询线程。这样,您始终可以在队列中接收更多查询,并且一次只能有一个数据库查询线程。
答案 3 :(得分:1)
如果查询紧密耦合,您只需使用pthread_create
启动并行线程,然后在该线程上顺序运行它们。因此,您的主线程不会被阻止,您仍然不需要使用任何锁。