http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 9383|回复: 11

[其他] 多线程处理误解,希望大牛给解释一下

[复制链接]
发表于 2013-3-29 13:42:13 | 显示全部楼层 |阅读模式
比如100个任务要处理,设定是2个线程。
1、是用2个线程一直处理完100条,如果这样,是不是要在线程里写循环来执行。比如第1条线程处理13579……条,第2条线程处理246810……条
2、不停的创建新的线程去处理100条,但是线程数不超过2. 线程里不用循环,循环写在外面,循环创建新线程。


希望大家说一下,这样处理的优缺点。


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2013-3-29 14:05:23 | 显示全部楼层
最好是在一个线程里执行一部分,这样可以节省创建和销毁线程的开支,提升效率。
如果一直开线程执行,一是不好控制个数,主要是不太容易控制线程什么时候结束,最主要的是影响性能

 楼主| 发表于 2013-3-29 14:44:43 | 显示全部楼层
站长苏飞 发表于 2013-3-29 14:05
最好是在一个线程里执行一部分,这样可以节省创建和销毁线程的开支,提升效率。
如果一直开线程执行,一是 ...

老大的意思,是创建两个线程,去完成100个任务。就像我说的,让一个线程去处理13579……条,第2条线程处理246810……条。这样的操作有什么缺点呢。
发表于 2013-3-29 14:49:50 | 显示全部楼层
SillyPGM 发表于 2013-3-29 14:44
老大的意思,是创建两个线程,去完成100个任务。就像我说的,让一个线程去处理13579……条,第2条线程处理 ...

从你说的问题上没有缺点,除了能提高性能,还是能提高性能,呵呵。有些时候要根据具体情况的,要看你实现什么样的功能了
 楼主| 发表于 2013-3-29 14:57:28 | 显示全部楼层
站长苏飞 发表于 2013-3-29 14:49
从你说的问题上没有缺点,除了能提高性能,还是能提高性能,呵呵。有些时候要根据具体情况的,要看你实现 ...

例子也是有的,比如我多线程登录XX网站,然后后续一系列的操作。
如果是开始的时候2个线程,这样的话,如何动态改变线程数,想多开几个,或者减少几个。
像我说的那样100个任务已经分配给2个线程来做,每个线程里都是循环,如果动态改变线程数,应该就会报错吧。
发表于 2013-3-29 15:07:38 | 显示全部楼层
SillyPGM 发表于 2013-3-29 14:57
例子也是有的,比如我多线程登录XX网站,然后后续一系列的操作。
如果是开始的时候2个线程,这样的话,如 ...

如果你这样讲,那只能使用第一种了,这就像是我要做图像识别一样,你说是用C++还是C#,你的工作已经让你限制死用什么了,当然是C++了,所以只要有具体例子了就好说了,
你使用多开线程的方式吧。

不过我给你提个醒,如果你用心的写我相信一个线程里加循环的方式也能实现你的效果,其实最重要的它性能要高的多,特别是在实现网页访问上,这个可以参考我的例子http://www.sufeinet.com/thread-13-1-1.html
 楼主| 发表于 2013-3-29 15:45:26 | 显示全部楼层
本帖最后由 SillyPGM 于 2013-3-29 15:47 编辑
站长苏飞 发表于 2013-3-29 15:07
如果你这样讲,那只能使用第一种了,这就像是我要做图像识别一样,你说是用C++还是C#,你的工作已经让你限 ...

大概明白了,一直开启新线程,动态修改线程数比较方便,但是耗资源。循环的可以实现,不过现在脑袋里的逻辑有点乱,比如现在2个线程正在执行,每个线程里的循环还没执行完,动态改成5个线程执行,不知道后面如何处理,是把前面的2个线程销毁掉,重新开5个线程,感觉上不能销毁,好像是用标志控制循环跳出,就相当于线程工作完了,然后通过判断循环执行的进度,来用新的线程去处理剩下的任务,还是如何处理。
发表于 2013-3-29 15:50:07 | 显示全部楼层
SillyPGM 发表于 2013-3-29 15:45
大概明白了,一直开启新线程,动态修改线程数比较方便,但是耗资源。循环的可以实现,不过现在脑袋里的逻 ...

你为什么要一下子给线程里的循环多个数据呢
比如你建一个数据池
线程1
线程2
线程N....
都从数据池中取数据,而不是每个线程都循环,而是每个线程循环去取数据池的数据,同时也取一个开关不就行了,当然收到要结束的开关时直接结束线程,这时候不管你要开多少,关多少个,甚至要关那个线程不都是很容易了吗?


 楼主| 发表于 2013-3-29 22:20:17 | 显示全部楼层
站长苏飞 发表于 2013-3-29 15:50
你为什么要一下子给线程里的循环多个数据呢
比如你建一个数据池
线程1

感谢飞哥的指导,如果有个简单的小例子就更完美了,我会努力学习哦!
再次支持苏飞论坛!
发表于 2013-3-29 22:56:35 | 显示全部楼层
SillyPGM 发表于 2013-3-29 22:20
感谢飞哥的指导,如果有个简单的小例子就更完美了,我会努力学习哦!
再次支持苏飞论坛!

小的没有,都是大项目,回头有空给你拉个架子吧,你加群到时我会发群里,你也可以自己写,按我的思路没问题的,相信你可以的,到时别忘记分享出来
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-11-22 08:14

© 2014-2021

快速回复 返回顶部 返回列表