
小米和华为手机底层差距咋这么多。 我的一个 Android APP,在华为上跑 300 个线程就 OOM 了,而相同配置的小米机器上跑 2000 个线程也不会 OOM ?
哈哈,这么多人问我有木有程序员认证, 我只是想抛个问题而已。
假设有个需求:1 秒发送 500 个 http get 或 post 请求,每个请求的 ip 和端口都不一样。数据响应只需得到 http 状态码,不需要解析具体的 response 内容。
记住: 每秒 500 个请求,而且不能闪退!
1 hauk0101 2018-11-23 14:09:44 +08:00 via Android 华为软件层做的也不咋样,尤其是浏览器。。。 |
2 gabri 2018-11-23 14:11:35 +08:00 via Android 麒麟警告 |
3 XinLake 2018-11-23 14:12:41 +08:00 via Android 图呢 |
4 qwertty01 2018-11-23 14:29:26 +08:00 华为水军还有 30 秒钟到达战场 |
5 BOYPT 2018-11-23 14:30:07 +08:00 华为水军还有 5 秒钟到达战场 |
6 jason94 2018-11-23 14:31:39 +08:00 全军出击~ |
7 lengyihan 2018-11-23 14:34:51 +08:00 via Android victory !!! |
8 102400 2018-11-23 14:35:18 +08:00 开发时同样的 APP 确实华为问题会多点,不知道是不是底层动得太多了 |
9 helionzzz 2018-11-23 14:36:02 +08:00 理智一下,来爆个型号。。避雷 |
10 JiafuYuan 2018-11-23 14:36:49 +08:00 这算辱 hua? |
11 deep89381 OP 花半小时写个 dome 自己测试下就明白了。其实我觉得华为这样设计是对的,没毛病! |
12 afc 2018-11-23 14:40:02 +08:00 能拍夜景就完事了。 |
13 ech2o 2018-11-23 14:41:16 +08:00 华为自己的工程师不也说自己的家的 EMUI 不咋地么,太冗余了 |
14 zclHIT 2018-11-23 14:44:15 +08:00 爆一下型号,避免触雷。。 |
15 est 2018-11-23 14:44:36 +08:00 |
16 iccfish 2018-11-23 14:50:34 +08:00 对啊,LZ 你开那么多线程干嘛![狗头保命] |
17 deep89381 OP |
18 donyee 2018-11-23 14:55:23 +08:00 你为啥测试这么多线程?你有程序员证吗? |
19 shyrock 2018-11-23 14:58:30 +08:00 照片门、闪存门、疏油层门、绿屏门都没有打倒华为,lz 你这是想搞个大新闻? |
20 hahasong 2018-11-23 15:02:14 +08:00 小米啥型 号,想买一个 |
21 graysheeep 2018-11-23 15:05:12 +08:00 麒麟警告 |
22 JamesSi 2018-11-23 15:06:09 +08:00 via Android 看到现在一个海军也没有… |
24 shanlan 2018-11-23 15:08:11 +08:00 警告! |
26 jitongxi 2018-11-23 15:09:41 +08:00 华为=智商检测机 |
27 volks 2018-11-23 15:09:58 +08:00 via Android 当蓝是为用户设想,防止软件滥用资源啊 |
28 kernel 2018-11-23 15:12:51 +08:00 via Android 说明小米的系统不行。 跑两千个线程这种垃圾消耗资源应用都干不掉。 |
29 di1012 2018-11-23 15:13:28 +08:00 突然想起来一个笑话,两个人是邻居,关系很好,但他们各自养的狗一见面就掐架。。。。 |
30 66beta 2018-11-23 15:17:21 +08:00 via Android 华为海军 2 个航母打击大队马上到位 |
32 WuwuGin 2018-11-23 15:22:48 +08:00 省电精灵。 |
33 diggerdu 2018-11-23 15:33:54 +08:00 via iPhone 这不是 bug 这是 feature !!! |
34 also24 2018-11-23 15:34:44 +08:00 via Android 33 楼了,居然还没有人问 机型 /系统版本 /运行内存 …… |
35 also24 2018-11-23 15:35:48 +08:00 via Android 啊,仔细看了一下,漏掉了 9/14/20/25 楼 |
36 skyadmin 2018-11-23 15:49:43 +08:00 红米这个价钱上,华为一个能打的都没有。 |
37 alex321 2018-11-23 15:55:00 +08:00 我依稀记得当年华为被爆 lpddr3/4 和 emmc5.1/5.0 甚至 4.5 在自家旗舰机型上混用的时候,官方说过对比同代别家的 lpddr4 + ufs2.1 旗舰组合,华为在优化上使其达到了同样的体验。 |
40 a href="/member/Kolin" class="dark">Kolin 2018-11-23 17:02:56 +08:00 @also24 你怎么可以这么可爱。。 |
41 blackhacker 2018-11-23 17:05:12 +08:00 @di1012 本来不想回这帖子的,真被这哥们儿逗笑了! |
42 000wangxinyu000 2018-11-23 17:10:43 +08:00 @est 对啊,LZ 你开那么多线程干嘛! |
43 vokins 2018-11-23 17:10:54 +08:00 via iPhone 半年以前狠狠心买了 p20pro,电池 4000 还没有别家 3000 的耐用。夜景挺好的。买完几天内就陆续看到 p20pro 吊打索尼 a7 和尼康 d850 的通稿。滑动卡顿,打电话给客服说一周内会推送新版解决。电信信号比高通处理器的信号好,联通信号很差。我等不了,也不相信煲机续航有提升。三天内就以七天无理由退货了。 |
44 season4675 2018-11-23 17:15:23 +08:00 首先……如果你那 1G 的华为和 6G 的小米比,那就…… |
45 nzd 2018-11-23 17:16:30 +08:00 水军+黑 PR,无限负分。。。。 |
46 vanxy 2018-11-23 17:18:31 +08:00 写了个 Demo 验证了一下:启动线程 Sleep 30s, 批量开始增加,一直到崩溃闪退: 诺基亚 x7 (高通):7000 个线程时闪退 魅族 pro6s (联发科):11000 个线程时闪退 华为 Mate 8 (麒麟):500 个线程时闪退 华为荣耀 9Lite (麒麟):500 个线程时闪退 果然联发科比较牛 |
48 xiaozhuyaoye010 2018-11-23 17:35:40 +08:00 记得我在 tb 上收到一个缺陷,是只有荣耀和华为的机型才会出现的问题。 我不是做安卓的,公司的 APP 是内嵌的我们的网页,接到这个 bug 的时候我一脸黑线。。。。。。。 |
49 Jessepinkman 2018-11-23 17:42:52 +08:00 华为用户,但再也不打算买华为了。 |
50 zt1991616 2018-11-23 17:44:12 +08:00 我们 HTTP header 对时间敏感,后台有很多报错的 log,HW 在某些情况下真正请求的时间是我发起 HTTP 的几个小时甚至十几个小时后 PS:怀疑是锁屏后 APP 锁屏后被暂停了 |
51 zt1991616 2018-11-23 17:45:57 +08:00 PPS:对于超多线程的情况 可以试试 https://github.com/Kotlin/kotlinx.coroutines/blob/master/coroutines-guide.md |
52 XinLake 2018-11-23 17:48:21 +08:00 via Android 老夫弱弱的问下,上次华为 P10 内存事件好几十个用户状告华为,那事情咋样了,有人知道不,求科普 |
53 yakun4566 2018-11-23 17:56:55 +08:00 pro6 这么厉害么,我的送妹妹了。。。 |
54 acidsweet 2018-11-23 17:59:20 +08:00 来当个海军好了。这 tm 是手机不是服务器啊,那么多线程干什么? 华为手机照片门、闪存门、疏油层门、绿屏门都是确凿的丑事,但是多线程这事不是啊,一个嵌入式设备支持那么高并发干蛋? 池化、协程才是你代码应该考虑的,切换线程不要代价的啊 |
57 zhiqiang21 2018-11-23 18:09:51 +08:00 请问下你是程序员有认证嘛。。。。逃。。。。。 |
58 EXE 2018-11-23 18:18:49 +08:00 楼主这是要搞个“线程门”? |
59 nicevar 2018-11-23 18:28:45 +08:00 你们都错了,楼主要么无知,要么就是故意钓鱼的,其实就是一个 heapsize 的问题,华为有些高端机器也限制在 256m,而小米是 512m |
60 deep89381 OP 哈哈,这么多人问我有木有程序员认证, 我只是想抛个问题而已。 假设有个需求:1 秒发送 500 个 http get 或 post 请求,每个请求的 ip 和端口都不一样。数据响应只需得到 http 状态码,不需要解析具体的 response 内容。 记住: 每秒 500 个请求,而且不能闪退! |
63 nicevar 2018-11-23 18:45:18 +08:00 @est 肯定不包括低端机,低端机大多数限制 256m,我都怀疑楼主是华为的人故意来消遣 v 站的华为黑,其实就是每个进程的最大内存限制不同而已,与硬件配置没啥关系,build rom 的时候限制了,用 getprops 看一下两台设备的 heapsize 就清楚了,华为很多高端设备也是限制 256m,这个做法也没啥 |
64 XinLake 2018-11-23 18:54:10 +08:00 via Android heapsize 限制不一样也不会这么大差别吧,难道芯片缺陷? |
66 ChrisTsai 2018-11-23 18:58:49 +08:00 @zhuifeng1017 #60 没什么意义,谁说的 500 个请求必须得开 500 条线程?开 50 条线程每条线程并发 10 条请求不可以?我猜只是华为人为限制一个 APP 不允许有这么多线程罢了,和底层性能无关。 |
67 23f0baf3 2018-11-23 19:00:30 +08:00 via Android 怕是乱改了系统主动限制线程吧,尽管我觉得限制挺合理的。正常程序不需要开 500 个。。。华为总是喜欢乱魔改,内核还禁用了 ptrace,导致很多修改器之类的不能用。。。 关于扫描器,当然是用 raw socket,发完包直接停止,握手都不要完成最快了,当然可能要 root,建议参观成熟的扫描器实现 nmap,zmap。需求简单的话 termux 直接装个 nmap 也很方便。 |
68 bkmi 2018-11-23 19:01:15 +08:00 via Android |
69 pwrliang 2018-11-23 19:01:34 +08:00 via Android 每个线程都有独立的 Stack,难道不是 Stack size 的问题? |
70 niketwo 2018-11-23 19:02:35 +08:00 via Android 我华为手机有问题我还不能说啊!“敢说华为有问题,是不是要叛国啊!(一脚踢飞)” |
72 tudogplus 2018-11-23 19:06:07 +08:00 via Android 亏这是 v2ex,要是别的网站你早就水军缠身了 |
73 XinLake 2018-11-23 19:06:39 +08:00 via Android 抛开 JVM 不说。要是底层 c 代码线程数差别这么大,这芯片就有特点了。 可惜我没机器式不了 |
74 zhangdawei 2018-11-23 19:09:48 +08:00 @di1012 哈哈哈哈哈哈哈哈 |
75 longbye0 2018-11-23 19:09:53 +08:00 via Android 这个标题有主语不清的问题 |
76 FenGuWu 2018-11-23 19:13:39 +08:00 via iPhone 钓鱼贴无疑。题主的信息太少了。好比:博尔特跑的比乔丹快。所以博尔特是运动能力更强的那个。显然比较不能这么比。 |
77 轿车都能跑到 200 公里,有的还能跑更多,华为产的只能跑 30 公里,这个值得怀疑啊 |
79 feverzsj 2018-11-23 19:18:04 +08:00 因为华为就是烂呀,这么简单的道理都不懂? |
81 nicevar 2018-11-23 19:23:38 +08:00 @apeshit 没什么关系,楼主说的是 OOM,超过 heapsize 被系统强行干掉了然后 android 系统会报这个 |
82 1daydayde 2018-11-23 19:34:55 +08:00 via iPhone |
83 wwqgtxx 2018-11-23 19:36:45 +08:00 @zhuifeng1017 你难道不知道有一种机制叫做非阻塞式 socket 么,配合 epoll 使用,一个线程就能完成你的需求 |
84 deep89381 OP @wwqgtxx , 当然知道,用 c++我可以写,用 epoll 或 select 都可以。java 我想用 okhttp 来写,但是 okhttp 是用线程池来搞的,一个连接一个线程 (ps:相同的 host+port 才复用线程) |
85 treo 2018-11-23 21:08:34 +08:00 小米有很多外资股东 ov 的后台老板段永平,早就移民美国了 只有华为是纯内资的,真正的中国人自己的手机 华为再难用,emui 再丑,bug 再多,屏幕再绿,照片再怎么丢,不买华为也对不起自己的良心 |
86 zzlhr 2018-11-23 21:12:15 +08:00 华为人估计在加班,还没出来~~~逃 |
87 jiangnanyanyu 2018-11-23 21:38:02 +08:00 via Android 你这是乳.hua(doge) |
88 n37r06u3 2018-11-23 21:43:50 +08:00 华为吧 不仅硬件垃圾 ,系统更垃圾。小米系统还是不错的,虽然广告多。 |
89 wobushizhangsan 2018-11-23 21:44:14 +08:00 via Android 小米连这种流氓应用都检测不出来,技术不行啊 |
91 heiher 2018-11-23 21:50:25 +08:00 via Android 哈哈,协程了解一下。 |
92 xyjincan 2018-11-23 22:25:23 +08:00 via Android 发 HTTP 请求也不一定开一堆线程吧 |
93 XinLake 2018-11-23 22:32:55 +08:00 via Android 有的网络应用很多线程的,UPnP 协议栈动不动上百个线程 |
95 flynaj 2018-11-23 22:34:55 +08:00 via Android 国内手机都喜欢修改系统,小米是以前被 Google 点名批评过,现在好的多了 |
96 fengyj 2018-11-23 23:05:30 +08:00 以前我一直吐槽,开头一张图,内容全靠扯。 现在...emm ,图呢? 楼上真的好多无脑黑。 |
97 FenGuWu 2018-11-23 23:16:10 +08:00 via iPhone @zhuifeng1017 如果不给我 OOM 的原因怎么讨论呢? OOM 可能是栈的原因(线程太多栈空间不足)华为限制了栈大小么?还是堆空间不足,有无法回收的对象导致的?啥都没有你说怎么比较?万一你强行 string.intern 呢?这可能导致持久代 OOM 啊。 |
98 metrxqin 2018-11-23 23:29:48 +08:00 这是在写 APP 还是服务端? |
99 t6attack 2018-11-23 23:35:40 +08:00 这就是为什么厂商都争取 APP 化,有了完整的客户端权限,可以自由下发脚本代码,拿用户手机做任何事。 每个用户的手机都是一台肉鸡、一个全功能的代理 IP 资源。 |