易语言吧 关注:266,699贴子:1,666,351
  • 4回复贴,共1

昨天晚上12写完运行的,3代i

取消只看楼主收藏回复

昨天晚上12写完运行的,3代i5四核处理器开5个线程到现在9点半才处理了1500多个,80万*80万*4的机器提取有用学习文本看来我需要一台几百颗CPU的计算机,怎么破?怎么破!


IP属地:广东来自Android客户端1楼2017-06-09 09:39回复


    IP属地:广东4楼2017-06-09 10:05
    回复
      我这段代码是这样的:有一个80W成员的数组,单线程处理要8秒一个成员,所以改成多线程,延迟(200)不是问题所在,因为我开5个线程就会用掉98%左右的CPU,事实上改成延迟(1000)效果还是一样的。而且 延迟() 不是 延时() 不会干扰其他线程的运行。数组是一个程序集数组(数源数据),而另一个数组是保存结果的数组,并没有用动态数组啊,这个数组是这样的在线程中如果没有结果就写入一段文本,总控子程序就会根据这段文本将这个数组成员的操作权让下一个线程,所以不会来回申请内存,而且这个文本需要完全匹配,用模糊匹配会导致程序错误,还有就是易语言的就是一个一个字符去判断文本是否相等的,如果你可以从底层一步判断文本是否相等那你就神了,吴涛都做不到,C语言也做不到,那个延迟也不能在别的线程里,不然那还叫延迟?为什么那里要加延迟?因为需要等待数据确定传入了线程,当然你可以改小,但是这对于我这个程序效率不会有任何改变,因为每开启一个线程只用200多毫秒,而一个线程的返回时间是8秒以上,5个线程以上就会卡,而第一个线程返回时,总控程序已经启动了5个线程并且已经等待了6秒多了。链表难道不是一样,需要保存上一个和下一个链表的指针,按你的想法还需要在一个链表没有有效结果的时候去脱链然后再将上一个链表结构体里的指针重新指向下一个,这难道不增加计算开支?而我文本处理还没被阻塞过,等待事件是用于容易出现误操作时 用的,用在这里只会导致处理玩所有任务才返回,这不是一等就是8秒? 如果真要在超级计算机里运行,需要改成多线程分发,而延迟不需要太低,只要设为取出开启线程到参数传递完成所需时间+50%就可以了。虽然你可能一个都没说对,但是还是欢迎你有什说什么,不然不论证怎么有进步?


      IP属地:广东来自Android客户端9楼2017-06-09 21:35
      收起回复
        经过测试,延迟和延时每个两次第一次取每个3个运行完成所用额时间,第二次取每个5个运行完成所用的时间,第一次平均值延迟比延时快1.几秒,第二次延迟比延时快10.76秒,这是为什么?


        IP属地:广东来自Android客户端11楼2017-06-09 23:59
        收起回复
          我准备建立一个拼音(文本)和位置(数组)的数据结构数组, 开始处理前把所有成员的位置按首拼音分类,按常用拼音有400多个算的话,这样可能只会用到原来300分之1的时间,你们认为可不可行? @gmxdngc @依旧W如此 @坠落陀螺 @花小魂T


          IP属地:广东来自Android客户端16楼2017-06-10 10:32
          收起回复