论坛很多弟兄会碰到很多问题。尤其是崩溃恨头疼。现在来总结下基本上的原因
1.因为易语言只支持32位编译。然而32位的程序是单个程序的内存上限是4个G,就是说,不管你电脑配置多少高级,内存条不管是32G还是64G,但是你只要是易语言编写的程序,他单个程序用到的内存只能是4G就是其他的他用不上,但是你软件在使用过程中 超过了这个峰值,那样自然而然的就崩溃了。这4个G是峰值,并不一定到达4个G才会崩。也可能2G就崩了。
2.我们在线程中处理,此处线程并非并发线程!!!,因为处理完数据后他会自动释放内存,所以一般情况下,他内存是一下子达不到那个崩溃的峰值的。一般情况你在多线程中,50,100,200这么跑,只要是数据不是集中一下处理,是不会出现崩溃情况。我们就拿最简单的网页_访问_对象这条命令和A=A+1这两条来做数据对比。在正常情况下,你在 线程_启动(&这里是你启动的程序,这里就处理A=A+1)外面在套入一个计次循环首(这里循环300次甚至1000次2000次)他多不会蹦,因为他只是做了基本的数据增加处理,并不会占用太大内存,这种情况下你的软件是不会蹦的。但是 你线程_启动(&这里是你启动的程序,这里就处理网页_访问_对象)这里访问随便一个网站post数据包。基本上他达到250次就会崩了。因为访问网页他占用的内存比较大。一下子并发200次就会超过他那个上限。所以崩。。 由此得出,一般你的软件崩溃,尤其是线程中崩溃 ,不管是你用cchttp或者e2ee做接口之类的,或者开发其他工具的时候,只要数据过大内存占用较大。必定崩。这是无法避免的。。
3.如何处理并改进这些呢。因为我是做API接口。也碰到上诉问题。所以,我现在处理的方法就是。我把我的主程序写成DLL,一些计算类的算法全部写成DLL里面。然后在写一个程序去调用DLL。然后这个程序再去写个API接口,我这里用的是HP,然后我们知道一个DLL能被多个程序调用且互不干扰。那样我就在写了第三个程序。这个程序就是类似进程保护和接口传输。 因为比如我的第二个程序是访问的API是127.0.0.1:2000端口或者2001/2002/2003这样那样我的第三个程序就是进程保护第二个程序,并且给第二个程序分类端口用。确保第二个程序崩了之后能自动重启且自动启动端口为崩掉之前的端口。那样就不会影响正常使用。。。 目前这套方案已经实现且已经运行毫无压力。因为主要的功能是在DLL中的,客户使用的时候可能需要1000-2000的并发请求。我就开了300个127端口。然客户随机127.0.0.1+随机端口,这样即可避免软件崩溃。即使崩溃了个别端口也不要紧因为其他的端口还存活着照样能返回数据,而且第三个程序就是保护端口崩掉后重启的,等个一秒左右也就自动重启了所以无伤大雅(目前测试服务器是E5洋垃圾48G内存服务器线程数也是56)。
4.嘴下留情,嫌麻烦的,或者说为什么不用其他语言写的可以离开了。我如果会其他语言写这些我还在这????
评分
参与人数 1精币 +2
收起
理由
小米加鸡蛋
+ 2
楼主你真的错了,我多线程并发百十条,每个线程循环网页访问几百次甚至更多,都没问题,完.
查看全部评分