delphi怎样线程并发

laoliang911 2017-09-06 03:23:32
是这样的,数据库有近100万条数据,需要查询出来,一一处理,单靠查询遍历数据,非常慢,有没有并发的例子,想要并发同时处理这些数据,加快速度,谢谢。目前瓶颈不在查询速度上,而是在处理数据上,必须一一处理才行。比如 ,我先取出1000条数据,分别放入到了list1,list2,list3,list4,list5 里面(定义的Tstringlist)每个200条不同内容数据,然后分5个线程处理,发现处理时间上比单线程处理1000条并没有快,反而慢了些,而且一个线程处理完下一个线程才开始处理,所以求大牛写一下,怎么提高速度,数据取先按上面list 取,怎么让5个线程同时处理,谢谢
...全文
965 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
日月路明 2017-12-18
  • 打赏
  • 举报
回复
楼主威猛,每次都加载100万条数据进行处理,这也太不靠谱了
Mr Dang 2017-12-16
  • 打赏
  • 举报
回复
这样每次都去遍历真的好 ? 分2步去做新闻相似度这件事, 首先: 应该是把每条新闻存到数据库,建立 关键字(字段建立索引) 然后: 要计算相似度的时候,然后用SQL语句筛选 一下子就出来了~~
贺喜 2017-12-15
  • 打赏
  • 举报
回复
问题是,你为什么要遍历100万条数据,查询的目的无非就是要找到有用的,如果你录入一开始就有目的性的建立数据库,有效利用收录的时间,就不会这么麻烦,一秒钟找到有用的东西也不是什么事------这个最靠谱了。
whb00120012 2017-12-12
  • 打赏
  • 举报
回复
把你的处理写成存储过程,放到服务器端执行,可以快一点。
xiaocongzhi 2017-12-05
  • 打赏
  • 举报
回复
1.数据库调优 2. 你线程不能并发,你看看是不是有什么资源是独占的
秋天之落叶 2017-11-28
  • 打赏
  • 举报
回复
据我所知,多线程是利用CPU的空闲的时间干点别的私活,并不是同时执行,我理解的对吗?
nm_wyh 2017-11-28
  • 打赏
  • 举报
回复
这个问题分两种情况,一是服务端数据库有瓶颈,二是客户端瓶颈,如果你想单纯的处理数据,那这两种情况都好办。 把数据库分割成几个库,每个库中放一部分数据,然后n个客户端(注意在不同的电脑上)。只要网络不存在问题,这种肯定能处理OK, 实际上就是大数据 的分布式处理方式,只不过人家是自动的,你这需要手动布置一下!
日月路明 2017-11-27
  • 打赏
  • 举报
回复
比如 有100万条以前的新闻事件 ,新闻内容,目前有别人上传了一个新闻,我要查以前新闻的相似度,所以都处理一下。 ------------------- 我觉得你的算法有问题,加一条新闻,就要遍历原来的100万条记录,这个太恐怖,可以尝试加关键字,先抽取新的新闻的关键字,然后只抽取关键字相关的旧闻进行处理
qiankunbobo 2017-11-27
  • 打赏
  • 举报
回复
1、优化你的SQL 以及优化索引, 2、如果优化SQL达不到你要求的话那就换性能更强的服务器以及做集群
  • 打赏
  • 举报
回复
把查询到的数据用TClientDataSet缓存到本地再处理,不过从你说的“而且一个线程处理完下一个线程才开始处理”看还是你的代码有问题。
laoliang911 2017-09-12
  • 打赏
  • 举报
回复
5楼老兄,麻烦给个方法啊,是先放到内存里,然后处理,怎么异步线程处理,是打算放到16核服务器上的当成服务。
laoliang911 2017-09-12
  • 打赏
  • 举报
回复
3楼老兄 ,我的是在服务器上的,是有索引的,目前是先查出来放到服务器内存上的,关键需要数据处理,所以得遍历,我的处理是,比如 有100万条以前的新闻事件 ,新闻内容,目前有别人上传了一个新闻,我要查以前新闻的相似度,所以都处理一下。
lyhoo163 2017-09-08
  • 打赏
  • 举报
回复
在硬件的限制下,并发是不能提高速度的。因为,并发要分配CPU的,一个线程下,CPU全力计算,多个线程就得分别给各个线程,分配CPU的时间,这样,有时多线程,反而慢了。 除非你的计算机CPU速度快,核心数很多,例如服务器。此时,并发才可以提高速度了。 图片的处理,就需要多核心,大内存,这样,实现真正意义上的并行,才能提高速度。
十一夜飞天 2017-09-08
  • 打赏
  • 举报
回复
你如果处理不同的事务,比如有的事务比较耗时你放到一个线程,另一个线程处理其他事务,那有可能提高你程序的处理的能力,但是你一个事务分到几个线程并不能提高效率。CPU在一个时间就只能处理一件事情,你一个线程在查询,另一个线程只会等待。你应该考虑怎么优化你的业务逻辑。
mk_lucifer 2017-09-08
  • 打赏
  • 举报
回复
首先你应该优化数据库,合理使用索引,数据太多添加哈希算法,总之提高查询效率的方法太多了,但就是多线程解决不了的,你CPU就那个效率,就是全速前进只用来查询也没多大帮助。 问题是,你为什么要遍历100万条数据,查询的目的无非就是要找到有用的,就像百度数以亿计的条目中找出来推荐给你,他用了多长时间???他要也靠遍历不知要百度到何年何月了。。。。如果你录入一开始就有目的性的建立数据库,有效利用收录的时间,就不会这么麻烦,一秒钟找到有用的东西也不是什么事。
laoliang911 2017-09-07
  • 打赏
  • 举报
回复
没人回复啊 ,希望大牛给简单写写,怎么多线程并发,怎么占内核
  • 打赏
  • 举报
回复
应该是你的代码写的问题。

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧