为什么 echo 很特殊

回复列表(52|隐藏机器人聊天)
  • @Ta / 2022-08-22 / /

    @无名啊,我觉得就是WSL1慢。微软说WSL2某些应用快2到5倍

  • @Ta / 2022-08-22 / /

    @老虎会游泳,手机上一试,确实是printfecho

    我加一个数量级再试试,减少wsl 1反复启动进程带来的损耗吧

  • @Ta / 2022-08-22 / /

    @无名啊,你的手机结果和我的不同,因为我的printf("%d,%d\n", $uid, mt_rand(0, 255))是最快的。无论怎么测,多参数printf都远比其他快。

  • @Ta / 2022-08-22 / /

    @老虎会游泳,你看截屏上半部分结果,我的也是多参数 printf 最快

    下半部分是加入了| wc -lc | sed '…'导致的,鬼知道哪个环节拖慢速度

  • @Ta / 2022-08-22 / /

    @无名啊,估计和体系结构有关了,寄存器分配、缓存命中率,都能影响性能

  • @Ta / 2022-08-22 / /

    @老虎会游泳,加了一个数量级后,测试结果出来了

    结论

    wsl 1还是很慢,比我手机慢 3 ~ 6 倍。。

    手机结果

    <echo $uid . ',' . mt_rand(0, 255) . "\n">
    
    real    0m14.348s
    user    0m10.306s
    sys     0m3.968s
    
    <echo $uid , ',' , mt_rand(0, 255) , "\n">
    
    real    0m31.896s
    user    0m16.267s
    sys     0m15.480s
    
    <printf($uid . ',' . mt_rand(0, 255) . "\n")>
    
    real    0m16.574s
    user    0m11.762s
    sys     0m4.733s
    
    <printf("%d,%d\n", $uid, mt_rand(0, 255))>
    
    real    0m13.303s
    user    0m8.735s
    sys     0m4.503s
    

    wsl 1结果

    <echo $uid . ',' . mt_rand(0, 255) . "\n">
    
    real    0m49.888s
    user    0m16.672s
    sys     0m33.219s
    
    <echo $uid , ',' , mt_rand(0, 255) , "\n">
    
    real    3m2.751s
    user    0m46.047s
    sys     2m16.688s
    
    <printf($uid . ',' . mt_rand(0, 255) . "\n")>
    
    real    0m54.545s
    user    0m19.188s
    sys     0m35.297s
    
    <printf("%d,%d\n", $uid, mt_rand(0, 255))>
    
    real    0m52.145s
    user    0m17.234s
    sys     0m34.906s
    
  • @Ta / 2022-08-22 / /

    @老虎会游泳,我切换至Deepin试试

  • @Ta / 2022-08-22 / /

    @老虎会游泳,我好久没开过deepin了,最后一次升级完,php版本是 7.3.19,第一项测试就花了 1m45s,不想测后面的了。。

  • @Ta / 2022-08-22 / /

    @老虎会游泳,听说现在 deepin 脱离 debian 了?不太敢联网升级

  • @Ta / 2022-08-22 / /

    @无名啊,php7和php8的性能不可同日而语。deepin软件源目前没有php8。

  • @Ta / 2022-08-22 / /

    @老虎会游泳,算了,懒得测了,就算 wsl 2 快 3 ~ 6 倍,也只是和我手机打个平手

    笔电从此没尊严了

  • @Ta / 2022-08-22 / /

    @老虎会游泳,哇,要是我手机支持 type-cHDMI 输出,我的笔电岂不就可以提前退役了。。

  • @Ta / 2022-08-22 / /

    @无名啊,我们测的是IO密集型应用,不能代表CPU性能。瓶颈可能在其他地方。

  • @Ta / 2022-08-22 / /

    @老虎会游泳,这。。写至管道/丢弃数据,算IO密集吗?

    甚至我觉得你那重定向至某个文件的,应该也是先写至系统缓冲区吧,可能没落盘就退出 php

    反正我电脑CPU跑满一个核了

  • @Ta / 2022-08-22 / /

    @无名啊,算啊,echo和printf不都是IO函数吗,整个代码除了计算随机数,就在IO啊。程序一直在IO,就叫IO密集,无论IO简单还是复杂。

  • @Ta / 2022-08-22 / /

    @老虎会游泳,实在不行,我在 php 内干 wc 的活 —— 计算总字数 好了,最后才输出一次结果试试

  • @Ta / 2022-08-22 / /

    @无名啊docker run --rm -it --entrypoint=/bin/bash php:cli
    image.png(131.14 KB)

  • @Ta / 2022-08-22 / /

    @无名啊,如果用ob_start()捕获输出,那么所有I/O操作就都在内存了,没有访问实际的I/O设备,应该就变成CPU密集型了。

  • @Ta / 2022-08-22 / /

    @老虎会游泳

    修复EOF不在行首导致出错

    不会出错啊

    The format of here-documents is:

    [n]<<[-]word
      here-document
    delimiter

    If the redirection operator is <<-, then all leading tab characters are stripped from input lines and the line containing delimiter. This allows here-documents within shell scripts to be indented in a natural fashion.

  • @Ta / 2022-08-22 / /

    @无名啊,我的x86比手机快很多啊。你应该在deepin里用php8试一试。可以像我那样开docker。

添加新回复
回复需要登录