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



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

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

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

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

有人知道我该如何防止这种阻塞吗?

感谢Marcel

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

引用文件:

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

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

我不确定我是否理解你的问题,但它对我来说加载得很快:

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

更新:我认为,在这种情况下(大多数情况下,对于其他可能正在做同样事情的人),您主要是从文件中读取数据。如果是这样的话,你也可以启动"服务器"并启动异步调用来读取文件,然后稍后再提供文件内容。这样你就不会阻塞事件循环,我认为这就是你现在遇到的情况。

最新更新