使用socket.jl 遇到的内存疯狂占用问题

我在学习TCP 套接字相关的简单示例, 想实现有传入指定端口的连接时候输出 helloworld,并且不受 sleep 的阻塞。

遇到的问题是:如果我按照第一种写法,没有问题,但如果我按照第二种写法,多次连接后Julia会占用大量RAM(~17G);想知道应该怎么理解造成这种差异的原因呢?

写法一

    using Sockets
    server=listen(2001)
    #正常
    while true
      sock = accept(server)
      @async begin
        println("hello world") 
        sleep(10)
      end
    end

写法二

    #耗尽机器内存
    while true
      @async begin
        sock = accept(server)
        println("hello world")
        sleep(10)
      end
    end

第一种第一个accept那就等待通信吧,第二种不停开新的accept任务就占内存了

2 个赞

我明白啦,我一开始以为既然都在一个 while 循环里,那accept就是一直在执行的,

自己逐步运行后才明白,listen开了个服务器,然后accept 接受一个从客户端发来的连接,如果没有客户端的话,就一直处于等待,而不会进入下一个循环。所以这时候 accept 任务取决于客户端连接数

结果我把它丢在@async 宏后,就会一直在新开accept,然后就爆内存了。

谢谢, xgdgsc。