当前位置: 代码迷 >> Java Web开发 >> 500个邮件,如何快速读取出邮件内容,能否在1分钟内读取完
  详细解决方案

500个邮件,如何快速读取出邮件内容,能否在1分钟内读取完

热度:28   发布时间:2016-04-13 22:23:19.0
500个邮件,怎么快速读取出邮件内容,能否在1分钟内读取完!
各位牛人:500个邮件,怎么才能在1分钟内读取完邮件。
所以我的思路是读取该邮箱的邮件数量,然后分成40份,通过start,end,来启动40个线程去读取。但是还是会很慢,

参数:msgs为邮件总数量,threadNum启动多少个线程,
public void HandleMessage(Message[] msgs, int threadNum, int custNo,
Properties props, String type, String server, String mailUser,
String mailPwd,SolrService solrService) {
int length = msgs.length;
int tl = length % threadNum == 0 ? length / threadNum : (length
/ threadNum + 1);

for (int i = 0; i < threadNum; i++) {
int end = (i + 1) * tl;
count ++;
HandleThread thread = new HandleThread("线程[" + (i + 1) + "] ",
msgs, i * tl, end > length ? length : end, custNo, i,
props, type, server, mailUser, mailPwd,solrService);
thread.start();
}

请各位大神支招,能否用C语言去读取,是否会更快一点。
------解决思路----------------------
这个东西不是更多地受制于网速吗?
------解决思路----------------------
你一次开40个对邮件服务器的请求不会被列黑名单吗?
另外要确认的问题是40个请求是不是几乎同一个时间都被邮件服务器接纳或是被排在队列里
------解决思路----------------------
这个应该跟线程多少没关系,关键在于邮箱服务器对你请求的处理。
------解决思路----------------------
开那么多线程不一定更快,试着减少线程数试试,邮件读取速度应该看机器的IO能力和网络情况,线程数设为机器cpu核心数的2倍试试,另外是否可以只建立一次与邮箱的连接然后再启动多线程使用同一个连接去读取邮件(对javamail不是很熟,不知道会不会有多线程安全问题),以上思路仅供参考
------解决思路----------------------
如果是用自己的电脑cpu4核应该保持三个线程比较好吧,不是线程越多越好
------解决思路----------------------
这涉及邮件服务器的,而且也涉及邮件到底包含什么内容(假定邮件里有个500M的附件),武断的说要1分钟之内下完,这是扯淡
------解决思路----------------------
首先要明确耗时的部分在哪儿?
要读取的文件大服务器还是已经在本地了?如果在服务器那耗时的一部分是建立网络连接,另一部分是邮件下载,下载又得看带宽。减少线程数量,共用网络连接,不要一个请求建一个连接。
如果的邮件在本地的话就要看是文件读取慢呢?还是你处理业务逻辑的速度慢?读取慢可以加入缓存,处理逻辑速度慢的话就得优化你的代码。

尽量分开读取服务器和读取本地,比如10个线程从服务器下载邮件然后存在内存里,5个线程从内存读下载好的邮件进行逻辑处理
------解决思路----------------------
各位牛人:500个邮件,怎么才能在1分钟内读取完邮件。
所以我的思路是读取该邮箱的邮件数量,然后分成40份,通过start,end,来启动40个线程去读取。但是还是会很慢,

不要以为多线程是万能的,线程数要和CPU匹配才多线程才有一定的意义,否则,系统需要花费许多资源用于线程的调度,反而使得效率降低,不知道lz是否了解IOCP,IOCP是最高效的网络模型,可以用来处理成千上万的并发连接,但是其线程数就区区的几条(一般为CPU核心数*2)

另外,多线程在只有一个网络线情况,是没有意义的,所有的访问,都的分时通过网络,抛开数据处理,单纯从网络访问角度,单线程的效率最高
------解决思路----------------------
理论上不是很难,单线程,然后考虑线程池 。 web,提高体验,可以做ajax请求。

------解决思路----------------------
不要用多线程,一个线程去处理会快点。
------解决思路----------------------

这问题我还没碰到过.
不过看情况貌似考虑的要素还挺多的.
多线程真的比单线程快?  (服务器处理是并发还是排队)
局域网 还是 外网?
附件的内容 纯文本还是有大量附件(就算楼上说的 很多附件都有几百兆的附件 光下载1分钟都不够)

做这个功能的本意是什么?变相实现可否? 就下载邮件的抬头,用户点开的时候再去实际加载下载该邮件内容.(在下载完抬头后,后台默默更新邮件内容之类的)
  相关解决方案