hackingwu
V2EX  ›  问与答

Java Thread 里 sleep,会占用 cpu 吗?

  •  
  •   hackingwu · Jul 27, 2020 · 3626 views
    This topic created in 2125 days ago, the information mentioned may be changed or developed.
    12 replies    2020-07-28 18:59:29 +08:00
    kop1989
        1
    kop1989  
       Jul 27, 2020   ❤️ 1
    我的理解是:会,但是比正常执行时占的少很多。
    因为 sleep 时释放了 cpu 的控制,但是会埋一个计时器,所以 sleep 时 cpu 的占用就等于计时器的占用。
    arloor
        2
    arloor  
       Jul 27, 2020
    跑题一下,写了一个 python 脚本,for 循环最后 time.sleep(120),top 看了下负载,一直占用 7%cpu 。

    这 python 的 sleep 很鸡肋啊
    itechify
        3
    itechify  
    PRO
       Jul 27, 2020 via Android
    借楼,JAVA 里,使用 http 访问第三方接口等待对方接口返回这段时间的 IO 阻塞占用 CPU 吗?
    supermoonie
        4
    supermoonie  
       Jul 27, 2020 via iPhone
    @oneisall8955 应该是不占用吧,阻塞住的应该是 io,等待数据返回
    astkaasa
        5
    astkaasa  
       Jul 28, 2020 via iPhone
    不会,sleep(0)就是马上让出 cpu
    wzzyj8
        6
    wzzyj8  
       Jul 28, 2020 via iPhone
    sleep 不是应该进程丢 block queue,完成其他操作再拉起吗。因为非 busy waiting 所以不占用才对。如果前后有 while loop 包裹的话应该是循环部分占的 cpu 吧
    j0hnj
        7
    j0hnj  
       Jul 28, 2020 via iPhone
    @arloor #2 show me your code
    arloor
        9
    arloor  
       Jul 28, 2020
    @j0hnj 有问题吗?应该还是比较简单的
    arloor
        10
    arloor  
       Jul 28, 2020
    top - 13:20:58 up 45 days, 17:09, 2 users, load average: 0.00, 0.00, 0.00
    Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie
    top - 13:21:12 up 45 days, 17:09, 2 users, load average: 0.00, 0.00, 0.00
    Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie
    top - 13:21:14 up 45 days, 17:09, 2 users, load average: 0.00, 0.00, 0.00
    Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie
    top - 13:21:44 up 45 days, 17:09, 2 users, load average: 0.00, 0.00, 0.00
    Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie
    %Cpu(s): 2.0 us, 1.5 sy, 0.0 ni, 94.0 id, 0.0 wa, 0.5 hi, 0.7 si, 1.3 st
    MiB Mem : 1989.0 total, 206.5 free, 612.6 used, 1170.0 buff/cache
    MiB Swap: 2118.0 total, 2097.3 free, 20.7 used. 1096.4 avail Mem

    PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
    653139 root 20 0 50916 11620 6548 S 6.6 0.6 0:05.49 python3 nat.py /etc/nat.conf
    j0hnj
        11
    j0hnj  
       Jul 28, 2020
    @arloor #10 你的 sleep 写在 if 判断里了,也就是 nft_rule == old_nft_rule (这种应该是多数情况)时是一个 while True 死循环,当然会占用 CPU
    arloor
        12
    arloor  
       Jul 28, 2020
    @j0hnj wc,搞笑了。还是不熟悉 python 。。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3086 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 10:49 · PVG 18:49 · LAX 03:49 · JFK 06:49
    ♥ Do have faith in what you're doing.