- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在做什么:我正在浏览数据库中的公司表...每个公司都有一个文本description
字段,并且在该字段内可以有许多超链接(很少超过 4 个)。我想做的是使用 curl
测试这些链接的“不良”响应(通常为 404,但任何非 200 的内容都会引起兴趣)。
顺便说一句,毫无疑问,这对于 Java 和 Groovy 都适用,无论哪种观点的人都可能有兴趣知道 GPars(Groovy 并行性)此处使用的底层线程池类是 ForkJoinPool
.
使用 Matcher
使用 Pattern
/(https?:.*?)\)/
收集这些 URL 后,我得到了映射“url”-->“公司名称”的 descripURLs
。然后我使用具有大容量的 withPool
(显然是因为等待响应的固有延迟),如下所示:
startMillis = System.currentTimeMillis()
AtomicInteger nRequest = new AtomicInteger()
AtomicInteger nResponsesReceived = new AtomicInteger()
poolObject = null
resultP = withPool( 50 ){ pool ->
poolObject = pool
descripURLs.eachParallel{ url, name ->
int localNRequest = nRequest.incrementAndGet()
Process process = checkURL( url )
def response
try {
//// with the next line TIME PASSES in this Thread...
response = process.text
} catch( Exception e ) {
System.err.println "$e"
}
// NB this line doesn't appear to make much difference
process.destroyForcibly()
nResponses = nResponsesReceived.incrementAndGet()
int nRequestsNowMade = nRequest.get()
if( response.trim() != '200' ) {
println "\n*** request $localNRequest BAD RESPONSE\nname $name url $url\nresponse |$response|" +
"\n$nRequestsNowMade made, outstanding ${nRequestsNowMade - nResponses}"
// NB following line may of course not be printed immmediately after the above line, due to parallelism
println "\nprocess poolSize $pool.poolSize, queuedTaskCount $pool.queuedTaskCount," +
" queuedSubmissionCount? $pool.queuedSubmissionCount"
}
println "time now ${System.currentTimeMillis() - startMillis}, activeThreadCount $pool.activeThreadCount"
}
println "END OF withPool iterations"
println "pool $pool class ${pool.class.simpleName}, activeThreadCount $pool.activeThreadCount"
pool.shutdownNow()
}
println "resultP $resultP class ${resultP.class.simpleName}"
println "pool $poolObject class ${poolObject.class.simpleName}"
println "pool shutdown? $poolObject.shutdown"
def checkURL( url ) {
def process = "curl -LI $url -o /dev/null -w '%{http_code}\n' -s".execute()
// this appears necessary... otherwise potentially you can have processes hanging around forever
process.waitForOrKill( 8000 ) // 8 s to get a reponse
process.addShutdownHook{
println "shutdown on url $url"
}
process
}
我在上述 50 个线程池中观察到,500 个 URL 将需要 20 秒才能完成。我尝试过更小和更大的池,100 个似乎没有什么区别,但 25 个似乎更慢,10 个则需要 40 秒才能完成。对于相同的池大小,每次运行的计时也非常一致。
我不明白的是,Process
es 的关闭 Hook 仅在关闭的最后运行......对于所有 500 个Process
es!这并不是说机器上挂着 500 个实际进程:使用任务管理器,我可以看到在任何时刻 curl.exe
进程的数量都相对较小。
同时,我从此处的 println 观察到,此处的 Activity 线程计数从 50 开始,但在整个运行过程中逐渐下降,到最后达到 3(通常)。然而...我还可以观察到最终请求仅在运行结束时添加。
这让我想知道线程池是否以某种方式被这些“僵尸”进程的“未完成的业务”“堵塞”......我希望最终的请求(共 500 个)在运行结束前完成。有什么办法可以提前关闭这些进程
吗?
最佳答案
Java 和 Groovy 都不支持子 Process
实例上的 addShutdownHook
方法。
唯一的方法addShutdownHook
Java 支持的是 Runtime
实例。这添加了一个钩子(Hook)来在 JVM 关闭时运行。
Groovy 增加了便利 addShutdownHook()
到 Object
类,这样您就不必编写 Runtime.getRuntime().addShutdownHook(..)
,但这不会改变底层机制:这些钩子(Hook)仅在 JVM 关闭时执行。
因为您使用 process.addShutdownHook 添加的闭包很可能保留对 process 实例的引用,所以这些闭包将一直保持 Activity 状态,直到 JVM 关闭(Java 对象,但是不是操作系统进程)
关于Java/GPars - 我的线程池似乎得到 "clogged",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49964063/
有没有人有一个例子来说明如何重新定义 C++ 内置的 clog,而不是有一个新的关联 rdbuf(),它被处理为原始 clog.rdbuf() 和 ofstream 对象的 rdbuf() 的三通到磁
最近我开始尝试大量抓取一个网站以用于存档目的,我认为让多个 Web 请求异步工作以加快处理速度是个好主意(10,000,000 个页面肯定需要大量存档)等等我冒险进入并行性的严酷女主人,三分钟后我开始
我正在做什么:我正在浏览数据库中的公司表...每个公司都有一个文本description字段,并且在该字段内可以有许多超链接(很少超过 4 个)。我想做的是使用 curl 测试这些链接的“不良”响应(
我已经安装了主-主复制。 一切正常,直到您断开两个服务器之间的链接。 一旦被破坏,如果超过某种限制,数据将不会从一个数据转移到另一个数据。 Max_packet 大小设置为 500mb。 但是,如果您
我要编译CLOGS library.I follow this手动的。我在 windows 10 x64 中使用 Visual Studio 2010,python 3.4。我对waf构建系统一无所知
我需要一个类来包装对 std::clog 的调用这样: 每条消息都带有标题前缀,其中包括时间和生成消息的实体的名称。 消息根据错误类型(例如调试、警告、错误)进行着色。 使用方式完全等同于std::c
两个排序的整数数组 A[1..N] 和 B[1..N] 按升序提供。 问题:设计一个O(log N)-time 算法来找出所有 2N 个整数的中位数。 N 可能不是 2 的幂。 为了简单起见,我们可以
在开发代码时,我有很多控制台日志记录 (std::clog) 和一些控制台输出 (std::cout)。但是现在,我想在线提交我的源代码,我想禁用所有控制台日志记录 (clog) 但保留控制台输出 (
这个问题在这里已经有了答案: What is the point of clog? (6 个答案) 关闭 7 年前。 我的代码中有一个基本的调试消息,它打印一条关于调用什么函数的消息。 #ifdef
以下程序在使用 g++ 退出后出现段错误: #include #include
这里的一个相关问题展示了如何只用木屐来做到这一点: How to redefine clog to tee to original clog and a log file? 现在的问题是如何同时为 c
我想创建一个类似流的类,通过它我可以写入 std::out 和 std::clog。 我有以下代码,但问题是它只写入 std::clog,而控制台上的输出并不像预期的那样(奇怪的是,它覆盖了自己)。
我知道目前的C++中没有线程的概念,但是this article is saying : A typesafe, threadsafe, portable logging mechanism ....
iostream 对象 cin、cout、cerr 和 clog 是在 iostream header 中声明的对象。 我知道在某些编译器中可能会在构造这些 iostream 对象之前尝试使用它们,因
cout、cin、cerr 和 clog 名称中的“c”是什么意思? 我会说 char 但我没有找到任何可以确认的东西。 最佳答案 The "c" stands for "character" bec
我在 Unix 上开发一个向 syslog 发送消息的 C++ 程序。 当前代码使用类似于 printf 的 syslog 系统调用。 现在我更愿意为此目的使用流,通常是内置的 std::clog。但
我在 ng-model 文档中摆弄 Angular 自己的站点使用的 plunker: http://plnkr.co/edit/?p=preview 如果将 $scope.val 设置为其中包含“”
log() = log base 2 of ()log()^2 = log^2 base 2 of ()我被这个归纳证明困住了。我有以下递归关系T(n) = T(n/2) + Theta(log(n)
我是一名优秀的程序员,十分优秀!