Vertx加载一个巨大的javascript文件 - 线程被阻止

时间:2016-05-11 09:09:14

标签: vert.x

此时,我创建了一个示例github项目 - https://github.com/marcelalburg/vertx-hugejson-thread-block-example

我的问题是,vertx在js文件部署期间阻塞了我的线程。

src / main / resources中的server.js文件是aprox 4mb big - 这应该模拟我的react redux服务器端渲染文件(这个是aprox 1.2 mb纯javascript)。

在部署期间,nashorn引擎尝试加载文件,在解析期间,vertx被阻止。

有人有想法,我怎么能阻止这种阻止?

感谢Marcel

2 个答案:

答案 0 :(得分:1)

这真的是个问题吗?我的项目中也有类似的Thread blocked日志,其中Jersey(我使用https://github.com/englishtown/vertx-jersey)需要很长时间才能启动。

To quote the documentation:

  

如果你这样做,那么当它被阻止时,该事件循环将无法执行任何其他操作。如果你阻止Vertx实例中的所有事件循环,那么你的应用程序将完全停止!

您不需要(也可能想要)处理其他请求,包括客户端请求,因此对我来说,在此阶段阻止事件循环是完全可以的。

答案 1 :(得分:0)

我不确定我理解你的问题,但它正在为我快速加载QUITE:

gorre@doom $ java -jar target/application.jar
May 11, 2016 10:39:47 AM com.hazelcast.instance.DefaultAddressPicker
INFO: [LOCAL] [dev] [3.5.2] Prefer IPv4 stack is true.
May 11, 2016 10:39:47 AM com.hazelcast.instance.DefaultAddressPicker
INFO: [LOCAL] [dev] [3.5.2] Picked Address[192.168.99.1]:5701, using socket ServerSocket[addr=/0:0:0:0:0:0:0:0,localport=5701], bind any local is true
May 11, 2016 10:39:47 AM com.hazelcast.spi.OperationService
INFO: [192.168.99.1]:5701 [dev] [3.5.2] Backpressure is disabled
May 11, 2016 10:39:47 AM com.hazelcast.spi.impl.operationexecutor.classic.ClassicOperationExecutor
INFO: [192.168.99.1]:5701 [dev] [3.5.2] Starting with 4 generic operation threads and 8 partition operation threads.
May 11, 2016 10:39:47 AM com.hazelcast.system
INFO: [192.168.99.1]:5701 [dev] [3.5.2] Hazelcast 3.5.2 (20150826 - ba8dbba) starting at Address[192.168.99.1]:5701
May 11, 2016 10:39:47 AM com.hazelcast.system
INFO: [192.168.99.1]:5701 [dev] [3.5.2] Copyright (c) 2008-2015, Hazelcast, Inc. All Rights Reserved.
May 11, 2016 10:39:47 AM com.hazelcast.instance.Node
INFO: [192.168.99.1]:5701 [dev] [3.5.2] Creating MulticastJoiner
May 11, 2016 10:39:47 AM com.hazelcast.core.LifecycleService
INFO: [192.168.99.1]:5701 [dev] [3.5.2] Address[192.168.99.1]:5701 is STARTING
May 11, 2016 10:39:50 AM com.hazelcast.cluster.impl.MulticastJoiner
INFO: [192.168.99.1]:5701 [dev] [3.5.2]


Members [1] {
    Member [192.168.99.1]:5701 this
}

May 11, 2016 10:39:50 AM com.hazelcast.core.LifecycleService
INFO: [192.168.99.1]:5701 [dev] [3.5.2] Address[192.168.99.1]:5701 is STARTED
May 11, 2016 10:39:50 AM com.hazelcast.partition.InternalPartitionService
INFO: [192.168.99.1]:5701 [dev] [3.5.2] Initializing cluster partition table first arrangement...
May 11, 2016 10:39:50 AM example.TestApplication
INFO: Cluster ready, starting verticle deploy
May 11, 2016 10:39:52 AM server.js
INFO: vertxStartAsync
May 11, 2016 10:39:53 AM example.TestApplication
INFO: Done

更新:我认为,在这种情况下(并且主要针对可能正在做同样事情的其他所有人),您主要是从文件中读取数据。如果是这种情况,您可以选择启动“服务器”并启动异步调用以读取文件,然后在以后提供其内容。以这种方式,你不会阻止你的事件循环,这就是我认为你现在正在发生的事情。