从Delphi异步访问MySQL数据库

3

如何在Delphi中异步访问MySQL数据库?

执行select语句的线程不应该被阻塞。为每个活动的select语句创建后台线程也不是一个解决方案,因为在负载较重的系统上,这将创建太多的线程并导致性能问题。

I/O完成端口(IOCP)正是我需要的。但我不知道如何在Delphi中使用这种技术与MySQL进行通信。


你为什么觉得IOCP适合你?你认为同时执行数百个查询对于你的服务器来说没问题吗?是的,客户端会很高兴,因为他们不需要运行数百个线程,但如果有许多客户端同时运行并发请求,那么服务器怎么办呢?考虑使用线程池并为查询设置队列。 - TLama
重负载=性能问题?经典解决方案:增加更多性能 :) - mjn
@TLama,我想从我的硬件中提取最大的性能。想象一下这样的情况,当我有一个Web服务器和几个连接到本地网络的数据库服务器时。如果在我的Web服务器上运行了数百个线程,那么将会花费大量的CPU时间在它们之间进行切换。但是为什么在不必要的情况下还要做这项工作呢?Web服务器应该提供Web页面,而不是在线程之间切换。我想要实现node.js所做的事情,但是用Delphi来实现。 - user1439838
1个回答

0
如果您有某种应用程序,实际上可以异步执行查询,则请这样做。让服务器处理并发问题。您可以轻松配置服务器。
例如,请查看innodb_thread_concurrencymax_connections

1
你没有回答如何在Delphi中异步执行查询而不阻塞启动查询的线程,也不创建单独的线程。请查看我在问题下面的评论。 - user1439838
@user1439838,你似乎在询问你提出的这些方法中应该选择哪一个。我选择“为每个活动的select语句创建后台线程”。 - Marcus Adams
我想在 Delphi 应用程序中获得与 node.js 相同的性能。大量并发连接不是问题,但大量空闲线程等待某些事件 - 这是问题所在。 - user1439838

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接