首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解Cro请求/响应周期和内存使用

理解Cro请求/响应周期和内存使用
EN

Stack Overflow用户
提问于 2022-05-10 05:09:35
回答 1查看 145关注 0票数 12

我对Cro如何处理客户端请求感到有点困惑,特别是为什么某些请求似乎会导致Cro的内存使用量急剧膨胀。

这方面的一个很小的例子出现在字面意思是“你好世界!”Cro服务器中。

代码语言:javascript
复制
use Cro::HTTP::Router;
use Cro::HTTP::Server;

my $application = route {
    get -> {
        content 'text/html', 'Hello Cro!';
    }
}

my Cro::Service $service = Cro::HTTP::Server.new:
    :host<localhost>, :port<10000>, :$application;

$service.start;

react whenever signal(SIGINT) {
    $service.stop;
    exit;
}

这个服务器所做的就是用"Hello!“来响应GET请求--这当然不应该费钱。然而,如果我导航到localhost:10000,然后快速刷新页面,我注意到Cro的内存使用量开始上升(然后保持高位)。

这似乎只有在刷新迅速时才会发生,这意味着该问题可能与不正确关闭连接或与并发问题(可能与之相关的先前问题)有关。

为了简单起见,这个"Hello“服务器是否省略了一些性能技术或最佳实践?还是我遗漏了其他关于Cro设计如何工作的东西?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-10 12:48:28

processing处理管道是一个由supply块组成的链,请求以及随后的响应都会通过。关于要创建的处理线程的最佳数量的决定由Raku ThreadPoolScheduler实现决定。

就连接生存期而言,取决于客户端--即web浏览器--如何关闭连接;如果浏览器使用保持活动的HTTP/1.1连接或保留HTTP/2.0连接,Cro会尊重该请求。

关于内存的使用,增长到一定程度并不令人惊讶;只有当它最终没有稳定下来时,它才是一个问题。原因包括:

  • 需要确定更多线程的调度程序才能处理负载。每个OS线程在VM中都有一些开销,其中大多数是GC托儿所是每个线程,以允许简单的指针碰撞分配。
  • MoarVM优化器使用内存为专用字节码和JIT编译的机器代码,它是在应用程序运行时在后台生成的,并由执行次数足够多的某些代码驱动。
  • GC试图在一个完整的集合阈值上收敛。
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72180995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档