由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 如何快速处理大量网上xml文件?
相关主题
asynchronous vs non-blockingObamacare website
写thread safe程序现在也是程序员必须要掌握的了吧core java里有跟C++ std::async类似的东西吗?
同步编程真郁闷看看大牛们为什么都远离.net
大家难道全是半路出家?谁能说说同步/异步IO和阻塞/非阻塞IO的区别?
真正对异步有需求的应该是游戏类服务器大牛们讨论一下异步编程吧
vertx里面同一个module多个verticle的疑问看了一下C#的async await
Java的服务器一般运行几个线程比较合适?parallel programming的复杂性分层/流行工具技术名词
An interview project: asynchronous socket programminggoodbug基本不会编程,就会吹牛逼
相关话题的讨论汇总
话题: thread话题: response话题: java话题: 异步话题: blocking
进入Programming版参与讨论
1 (共1页)
g*****n
发帖数: 15
1
小弟新手,恳请各位大侠指点。万分感激!
只用单个电脑, 不用hadoop/spark这些框架
网上有大约60万个xml文件,比如下面是一个:
http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pub
需要解析每个文件,结果然后存在电脑上。现在的程序每次都要访问网上的文件,大约
耗时3天才能完成。
有没有更加高效的方法,快速完成?
l**********n
发帖数: 8443
2
divide and conquer

【在 g*****n 的大作中提到】
: 小弟新手,恳请各位大侠指点。万分感激!
: 只用单个电脑, 不用hadoop/spark这些框架
: 网上有大约60万个xml文件,比如下面是一个:
: http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pub
: 需要解析每个文件,结果然后存在电脑上。现在的程序每次都要访问网上的文件,大约
: 耗时3天才能完成。
: 有没有更加高效的方法,快速完成?

w********m
发帖数: 1137
3
多开几个进程。
g*****n
发帖数: 15
4
详细说说?

【在 l**********n 的大作中提到】
: divide and conquer
l**********n
发帖数: 8443
5
forkjoinpool

【在 g*****n 的大作中提到】
: 详细说说?
z****e
发帖数: 54598
6
并发处理
别听楼上胡扯
process多开几个你就麻烦了
我的机器每次都被chrome的process拖得受不了
直接开threads并发处理就好了
但是不管怎样,我估计都很难压缩到几个小时内完成
除非你有很多计算资源
除了多个threads以外,你还可以把你已经处理过的结果给cache起来
放到db啊,nosql里面去,这样就不用每次都去parse xml了
下次再访问的话,直接查db,db访问要快得多
而且db还可以通过connection pool来优化,不过这个相比起几天这种来说
能优化的部分要小得多了
z****e
发帖数: 54598
7
这种多线程代码应该很容易写
自己启动多个threads
反正你互相之间也比较少争抢资源
不同的xml分配给不同的threads处理
一般现在机器都是两个cores吧
最少两个cores,连laptop都有两个了
应该至少可以提升一倍
如果你上cloud的话,一次性爆多个nodes同时处理的话
应该可以大幅提升处理效率
60万个分配给6个threads去处理
大概每个thread只需要处理10万个,这个速度就快起来了
如果你有资源,cloud, hpc之类的,开60个nodes小意思啦
g*****n
发帖数: 15
8
感谢回复!
能不能告诉我一个“自己启动多个threads”多线程代码的示例,我速成一下。

【在 z****e 的大作中提到】
: 这种多线程代码应该很容易写
: 自己启动多个threads
: 反正你互相之间也比较少争抢资源
: 不同的xml分配给不同的threads处理
: 一般现在机器都是两个cores吧
: 最少两个cores,连laptop都有两个了
: 应该至少可以提升一倍
: 如果你上cloud的话,一次性爆多个nodes同时处理的话
: 应该可以大幅提升处理效率
: 60万个分配给6个threads去处理

z****e
发帖数: 54598
9

最简单的就是自己写一个MyThread extends Thread
然后main函数里面:
MyThread myThread = new MyThread();
myThread.start();
多个的话
MyThread thread1 = new MyThread();
MyThread thread2 = new MyThread();
thread1.start();
thread2.start();
就启动了两个线程并发处理了

【在 g*****n 的大作中提到】
: 感谢回复!
: 能不能告诉我一个“自己启动多个threads”多线程代码的示例,我速成一下。

z****e
发帖数: 54598
10
例子很多,网络上随便找
http://hnzhoujunmei.iteye.com/blog/741286
然后你高级一点可以用什么executor之类的
无所谓了,反正本质上idea是一样的
相关主题
vertx里面同一个module多个verticle的疑问Obamacare website
Java的服务器一般运行几个线程比较合适?core java里有跟C++ std::async类似的东西吗?
An interview project: asynchronous socket programming看看大牛们为什么都远离.net
进入Programming版参与讨论
d****n
发帖数: 1637
11
http://play.golang.org/p/vS409gRveG
开20个worker,多用几个 电脑,当你 存xml时候注意一下duplicates就搞定了。指定
比你的 python快
// In this example we'll look at how to implement
// a _worker pool_ using goroutines and channels.
package main
import "fmt"
import "net/http"
import "log"
import "io/ioutil"
// Here's the worker, of which we'll run several
// concurrent instances. These workers will receive
// work on the `jobs` channel and send the corresponding
// results on `results`. We'll sleep a second per job to
// simulate an expensive task.
func worker(id int, jobs <-chan int, results chan<- int) {
for j := range jobs {
fmt.Println("worker", id, "processing job", j)
url := `http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&id=26296216&retmode=xml`
res, err := http.Get(url)
if err != nil {
log.Fatal(err)
}
bodyXML, err := ioutil.ReadAll(res.Body)
res.Body.Close()
if err != nil {
log.Fatal(err)
}
fmt.Println(string(bodyXML))
//TODO Unmarshal XML to map
//e.g. http://play.golang.org/p/kUQnZ8VuhS
// I have not tested it
results <- j * 2
}
}
func main() {
// In order to use our pool of workers we need to send
// them work and collect their results. We make 2
// channels for this.
jobs := make(chan int, 100)
results := make(chan int, 100)
// This starts up 3 workers, initially blocked
// because there are no jobs yet.
for w := 1; w <= 3; w++ {
go worker(w, jobs, results)
}
// Here we send 9 `jobs` and then `close` that
// channel to indicate that's all the work we have.
//!!!alter number of jobs or how the url need to be incremented
for j := 1; j <= 9; j++ {
jobs <- j
}
close(jobs)
// Finally we collect all the results of the work.
for a := 1; a <= 9; a++ {
<-results
}
}

【在 g*****n 的大作中提到】
: 小弟新手,恳请各位大侠指点。万分感激!
: 只用单个电脑, 不用hadoop/spark这些框架
: 网上有大约60万个xml文件,比如下面是一个:
: http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pub
: 需要解析每个文件,结果然后存在电脑上。现在的程序每次都要访问网上的文件,大约
: 耗时3天才能完成。
: 有没有更加高效的方法,快速完成?

z****e
发帖数: 54598
12
那如果要上worker的话
vert.x可以跑得比你的go更快
lol

【在 d****n 的大作中提到】
: http://play.golang.org/p/vS409gRveG
: 开20个worker,多用几个 电脑,当你 存xml时候注意一下duplicates就搞定了。指定
: 比你的 python快
: // In this example we'll look at how to implement
: // a _worker pool_ using goroutines and channels.
: package main
: import "fmt"
: import "net/http"
: import "log"
: import "io/ioutil"

d****n
发帖数: 1637
13
fyi: worker is goroutine

【在 z****e 的大作中提到】
: 那如果要上worker的话
: vert.x可以跑得比你的go更快
: lol

z****e
发帖数: 54598
14

so?自己试试不就知道了
除非你不敢试
json早就有人试过了
秒杀之

【在 d****n 的大作中提到】
: fyi: worker is goroutine
d****n
发帖数: 1637
15
用了golang之后,再也受不了这种恶心的写法了。(纯对语言,不是个人攻击)

【在 z****e 的大作中提到】
:
: so?自己试试不就知道了
: 除非你不敢试
: json早就有人试过了
: 秒杀之

z****e
发帖数: 54598
16

用点脑子,go底层就是thread
goroutine也不是什么新鲜玩意
如果你懂obj c的话,这种东西早就在ios编程上出现过了
这种写法远比worker简单直接
你真要上worker的话,有本事跟vert.x比比啊
json被秒得连渣都不剩,xml自己试试啊
就怕你不敢试

【在 d****n 的大作中提到】
: 用了golang之后,再也受不了这种恶心的写法了。(纯对语言,不是个人攻击)
d****n
发帖数: 1637
17
我自己的东西都prod了,开发和运行效率比公司的.net还快。(偷着乐)

【在 z****e 的大作中提到】
:
: 用点脑子,go底层就是thread
: goroutine也不是什么新鲜玩意
: 如果你懂obj c的话,这种东西早就在ios编程上出现过了
: 这种写法远比worker简单直接
: 你真要上worker的话,有本事跟vert.x比比啊
: json被秒得连渣都不剩,xml自己试试啊
: 就怕你不敢试

d****n
发帖数: 1637
18
嗯,本质上都是0101010101,看怎么写顺手。

【在 z****e 的大作中提到】
:
: 用点脑子,go底层就是thread
: goroutine也不是什么新鲜玩意
: 如果你懂obj c的话,这种东西早就在ios编程上出现过了
: 这种写法远比worker简单直接
: 你真要上worker的话,有本事跟vert.x比比啊
: json被秒得连渣都不剩,xml自己试试啊
: 就怕你不敢试

z****e
发帖数: 54598
19
在ios上这个叫做dispatch queue
其实本质是一样,这些底层都是thread
z****e
发帖数: 54598
20

其实我不觉得这种方式在这种简单应用上有多顺手
所以我还是建议用最直接的thread
反正又不需要处理并发,等有并发问题时候,再来折腾这些不迟

【在 d****n 的大作中提到】
: 嗯,本质上都是0101010101,看怎么写顺手。
相关主题
谁能说说同步/异步IO和阻塞/非阻塞IO的区别?parallel programming的复杂性分层/流行工具技术名词
大牛们讨论一下异步编程吧goodbug基本不会编程,就会吹牛逼
看了一下C#的async await看了一下Meteor很不错
进入Programming版参与讨论
z****e
发帖数: 54598
21

还是不敢试
就是怕看到benchmark

【在 d****n 的大作中提到】
: 我自己的东西都prod了,开发和运行效率比公司的.net还快。(偷着乐)
d****n
发帖数: 1637
22
我的code再按照楼主的意思改改就work了,不会超过150行。
java呢?build还没写完呢,我呵呵~~

【在 z****e 的大作中提到】
:
: 还是不敢试
: 就是怕看到benchmark

z****e
发帖数: 54598
23

楼主的java代码估计都已经在跑了
启动个thread就是三行代码的wrapper
顶多加一个for loop,也就是10行wrapper的事
干嘛要150行?你疯了

【在 d****n 的大作中提到】
: 我的code再按照楼主的意思改改就work了,不会超过150行。
: java呢?build还没写完呢,我呵呵~~

z****e
发帖数: 54598
24
愿意的话,我上groovy可以变得很快
大概一行wrapper搞定
d****n
发帖数: 1637
25
是,我不敢。我怕累死自己。每天写8个小时code.没心思在这耗心血,晚上还要看孩子
睡觉。
不知道你则呢这么精力旺盛。整天vert.x

【在 z****e 的大作中提到】
: 愿意的话,我上groovy可以变得很快
: 大概一行wrapper搞定

z****e
发帖数: 54598
26

vert.x哪里需要8个小时
这个东西从写完到跑
给我十分钟差不多就出来了
剩下debug点时间
装啥呀,xml的parse都做烂掉
vert.x写个wrapper两分钟足够了
你都有空把整个逻辑重新实现一边
写个wrapper都成精力旺盛了?

【在 d****n 的大作中提到】
: 是,我不敢。我怕累死自己。每天写8个小时code.没心思在这耗心血,晚上还要看孩子
: 睡觉。
: 不知道你则呢这么精力旺盛。整天vert.x

d****n
发帖数: 1637
27
jvm上跳来跳去,你们累不累啊?
总是没有一个满意的,呵呵。

【在 z****e 的大作中提到】
: 愿意的话,我上groovy可以变得很快
: 大概一行wrapper搞定

d****n
发帖数: 1637
28
该吃药了。

【在 z****e 的大作中提到】
:
: vert.x哪里需要8个小时
: 这个东西从写完到跑
: 给我十分钟差不多就出来了
: 剩下debug点时间
: 装啥呀,xml的parse都做烂掉
: vert.x写个wrapper两分钟足够了
: 你都有空把整个逻辑重新实现一边
: 写个wrapper都成精力旺盛了?

z****e
发帖数: 54598
29

什么时候跳过了?
一直都在用同样的东西互相补充
go, .net这些才是真正的不同系统和环境
连ide都要换,谁更累?

【在 d****n 的大作中提到】
: jvm上跳来跳去,你们累不累啊?
: 总是没有一个满意的,呵呵。

z****e
发帖数: 54598
30

自己回头看看
我就写了三行代码
基本上东西都看明白了
你写了多少行?

【在 d****n 的大作中提到】
: 该吃药了。
相关主题
说了半天异步是大势所趋没什么疑问了写thread safe程序现在也是程序员必须要掌握的了吧
说同步比异步快的根本不懂网站同步编程真郁闷
asynchronous vs non-blocking大家难道全是半路出家?
进入Programming版参与讨论
d****n
发帖数: 1637
31
一个语言好使还补充啥啊?都是残次品

【在 z****e 的大作中提到】
:
: 自己回头看看
: 我就写了三行代码
: 基本上东西都看明白了
: 你写了多少行?

z****e
发帖数: 54598
32

这叫diversity,百家争鸣,如果完美,你换了干什么?

【在 d****n 的大作中提到】
: 一个语言好使还补充啥啊?都是残次品
d****n
发帖数: 1637
33
泥马pseudo code也tm能运行?我要是写pseudo就说
multithreads
一个词!

【在 z****e 的大作中提到】
:
: 这叫diversity,百家争鸣,如果完美,你换了干什么?

z****e
发帖数: 54598
34

本质上就是一个字
前面也不是没有人这么说过
只是楼主要求elaborate
所以才说多了点
谁吃那么饱去把所有细节全部实现出来?
你这不是精力旺盛是啥?

【在 d****n 的大作中提到】
: 泥马pseudo code也tm能运行?我要是写pseudo就说
: multithreads
: 一个词!

d****n
发帖数: 1637
35
jvm程序员换来换去,学新的script累的跟吃屎似的,还百家争鸣。
怨声载道才是

【在 z****e 的大作中提到】
:
: 本质上就是一个字
: 前面也不是没有人这么说过
: 只是楼主要求elaborate
: 所以才说多了点
: 谁吃那么饱去把所有细节全部实现出来?
: 你这不是精力旺盛是啥?

z****e
发帖数: 54598
36

lol
换来换去不还是jvm?
你看go就没啥吸引力,对java程序员来说
你为啥换啊?

【在 d****n 的大作中提到】
: jvm程序员换来换去,学新的script累的跟吃屎似的,还百家争鸣。
: 怨声载道才是

d****n
发帖数: 1637
37
自己骂自己了?仔细看看前后你自己贴的,多tm矛盾。
你真该吃药了

【在 z****e 的大作中提到】
:
: lol
: 换来换去不还是jvm?
: 你看go就没啥吸引力,对java程序员来说
: 你为啥换啊?

z****e
发帖数: 54598
38

总结就是
同样东西不做第二遍

【在 d****n 的大作中提到】
: jvm程序员换来换去,学新的script累的跟吃屎似的,还百家争鸣。
: 怨声载道才是

z****e
发帖数: 54598
39

没啥矛盾的,我在用你的话骂你呢
看不懂?

【在 d****n 的大作中提到】
: 自己骂自己了?仔细看看前后你自己贴的,多tm矛盾。
: 你真该吃药了

d****n
发帖数: 1637
40
https://en.wikipedia.org/wiki/Category:JVM_programming_languages
真是不做2遍,都快100个变种了。还嘴硬
List of JVM languages
A
AgentSheets
Ateji PX
B
BeanShell
C
Ceylon (programming language)
CLforJava
Clojure
Adobe ColdFusion
D
Deeplearning4j
E
E (programming language)
F
Fantom (programming language)
Fortress (programming language)
Frege (programming language)
G
Golo (programming language)
Gosu (programming language)
Groovy (programming language)
I
NetRexx
Ioke (programming language)
J
Jaskell
Jasmin (software)
Java (programming language)
JavaFX Script
JRuby
JScheme
Judoscript
Jython
K
Kawa (Scheme implementation)
Kotlin (programming language)
M
Mirah (programming language)
N
Nashorn (JavaScript engine)
ND4J
ND4S
Nice (programming language)
Noop
P
Pizza (programming language)
Pnuts
Processing (programming language)
R
Rhino (JavaScript engine)
S
Scala (programming language)
SISC
U
Umple
W
Web Language
X
X10 (programming language)
Xtend
Y
Yoix

【在 z****e 的大作中提到】
:
: 没啥矛盾的,我在用你的话骂你呢
: 看不懂?

相关主题
大家难道全是半路出家?Java的服务器一般运行几个线程比较合适?
真正对异步有需求的应该是游戏类服务器An interview project: asynchronous socket programming
vertx里面同一个module多个verticle的疑问Obamacare website
进入Programming版参与讨论
z****e
发帖数: 54598
41

其他人愿意玩上搬谁有办法
你干嘛阻止别人这么搞啊?
再说了,同一个平台为啥要换来换去捏?
换平台难道比换语言容易?
好像不对诶

【在 d****n 的大作中提到】
: https://en.wikipedia.org/wiki/Category:JVM_programming_languages
: 真是不做2遍,都快100个变种了。还嘴硬
: List of JVM languages
: A
: AgentSheets
: Ateji PX
: B
: BeanShell
: C
: Ceylon (programming language)

z****e
发帖数: 54598
42

不做第二遍的意思是,我不会把同样东西再学一遍
很多scripting languages对我来说是一样的
那些差异,看看就算了
至于别人愿意不愿意做,那你控制不了啊

【在 d****n 的大作中提到】
: https://en.wikipedia.org/wiki/Category:JVM_programming_languages
: 真是不做2遍,都快100个变种了。还嘴硬
: List of JVM languages
: A
: AgentSheets
: Ateji PX
: B
: BeanShell
: C
: Ceylon (programming language)

d****n
发帖数: 1637
43
因为jvm就是被绑票了。本来能生成机器语言,结果都搞byte code.
我要是资本家就喜欢马功用jvm,我想咋整就咋整。
自己upgrade也把自己累成屎,多funny

【在 z****e 的大作中提到】
:
: 不做第二遍的意思是,我不会把同样东西再学一遍
: 很多scripting languages对我来说是一样的
: 那些差异,看看就算了
: 至于别人愿意不愿意做,那你控制不了啊

z****e
发帖数: 54598
44

不被jvm绑架就会被windows绑架
你自己选择吧
另外jvm升级么有出过什么问题啊
你又没用过,你懂个p
你换个os才会出问题

【在 d****n 的大作中提到】
: 因为jvm就是被绑票了。本来能生成机器语言,结果都搞byte code.
: 我要是资本家就喜欢马功用jvm,我想咋整就咋整。
: 自己upgrade也把自己累成屎,多funny

d****n
发帖数: 1637
45
jvm创造工作,多欢乐~

【在 z****e 的大作中提到】
:
: 不被jvm绑架就会被windows绑架
: 你自己选择吧
: 另外jvm升级么有出过什么问题啊
: 你又没用过,你懂个p
: 你换个os才会出问题

z****e
发帖数: 54598
46

创造需求,并解决问题
不像你,本来没啥鸟事
非要用个什么routin,还写了一百多行代码
累不累?

【在 d****n 的大作中提到】
: jvm创造工作,多欢乐~
d****n
发帖数: 1637
47
你是哪年开始的java?难道忘性比记性好?

【在 z****e 的大作中提到】
:
: 创造需求,并解决问题
: 不像你,本来没啥鸟事
: 非要用个什么routin,还写了一百多行代码
: 累不累?

z****e
发帖数: 54598
48

lol
要不你说说哪一年升级出了问题吧
从1.1开始的awt都还在用呢

【在 d****n 的大作中提到】
: 你是哪年开始的java?难道忘性比记性好?
d****n
发帖数: 1637
49
你个sb,那是working的100行。
你来个java的,我瞧瞧,顺便把maven/ant带上

【在 z****e 的大作中提到】
:
: lol
: 要不你说说哪一年升级出了问题吧
: 从1.1开始的awt都还在用呢

z****e
发帖数: 54598
50

lol
干嘛要用worker?
这么简单的需求,给整这么复杂
这不是sb是什么?

【在 d****n 的大作中提到】
: 你个sb,那是working的100行。
: 你来个java的,我瞧瞧,顺便把maven/ant带上

相关主题
core java里有跟C++ std::async类似的东西吗?大牛们讨论一下异步编程吧
看看大牛们为什么都远离.net看了一下C#的async await
谁能说说同步/异步IO和阻塞/非阻塞IO的区别?parallel programming的复杂性分层/流行工具技术名词
进入Programming版参与讨论
z****e
发帖数: 54598
51

另外
谁告诉你maven和ant是必需的了?

【在 d****n 的大作中提到】
: 你个sb,那是working的100行。
: 你来个java的,我瞧瞧,顺便把maven/ant带上

z****e
发帖数: 54598
52
随便抓一个好不好?
working的,这扩充成thread很难吗?
extends thread
thread declar
thread.start
加三行
难啥?
http://www.javacodegeeks.com/2013/05/parsing-xml-using-dom-sax-
d****n
发帖数: 1637
53
你瞎啊,worker是function name,不是java 里的同等概念。
洗洗睡了

【在 z****e 的大作中提到】
: 随便抓一个好不好?
: working的,这扩充成thread很难吗?
: extends thread
: thread declar
: thread.start
: 加三行
: 难啥?
: http://www.javacodegeeks.com/2013/05/parsing-xml-using-dom-sax-

z****e
发帖数: 54598
54

i dont fucking care
你写了一百多行,吃饱了撑着
你说你是不是精力旺盛?
有这功夫灌点水多愉快
神经病嘛,这么简单东西整这么复杂
还routin
撸多了脑子进水了吧?

【在 d****n 的大作中提到】
: 你瞎啊,worker是function name,不是java 里的同等概念。
: 洗洗睡了

d****n
发帖数: 1637
55
你抛出了个XML parser干毛?你知道楼主要存啥啊?
再说你这个xml parser+thread,看看你的破玩意一共多少行?再把编译配置写好,不
然累死

【在 z****e 的大作中提到】
: 随便抓一个好不好?
: working的,这扩充成thread很难吗?
: extends thread
: thread declar
: thread.start
: 加三行
: 难啥?
: http://www.javacodegeeks.com/2013/05/parsing-xml-using-dom-sax-

d****n
发帖数: 1637
56
是,和你对喷更快乐。
who care楼主要啥

【在 z****e 的大作中提到】
:
: i dont fucking care
: 你写了一百多行,吃饱了撑着
: 你说你是不是精力旺盛?
: 有这功夫灌点水多愉快
: 神经病嘛,这么简单东西整这么复杂
: 还routin
: 撸多了脑子进水了吧?

d****n
发帖数: 1637
57
routine都没拼对。

【在 z****e 的大作中提到】
:
: i dont fucking care
: 你写了一百多行,吃饱了撑着
: 你说你是不是精力旺盛?
: 有这功夫灌点水多愉快
: 神经病嘛,这么简单东西整这么复杂
: 还routin
: 撸多了脑子进水了吧?

z****e
发帖数: 54598
58

lol
搞得好像你知道一样
你也不知道好伐,或者说你压根就什么都没做
这东西配置很难吗?
无非一个path的设置问题
windows上jdk安装有傻瓜化的exe
难在哪呢?

【在 d****n 的大作中提到】
: 你抛出了个XML parser干毛?你知道楼主要存啥啊?
: 再说你这个xml parser+thread,看看你的破玩意一共多少行?再把编译配置写好,不
: 然累死

z****e
发帖数: 54598
59

拼对了干嘛用?
撸字的辅音也不是r啊

【在 d****n 的大作中提到】
: routine都没拼对。
d****n
发帖数: 1637
60
嗯,不难,
老子的:
go build
都不用装啥sbdk,也不用安装,就能用了。xml,http都是build in的

【在 z****e 的大作中提到】
:
: 拼对了干嘛用?
: 撸字的辅音也不是r啊

相关主题
goodbug基本不会编程,就会吹牛逼说同步比异步快的根本不懂网站
看了一下Meteor很不错asynchronous vs non-blocking
说了半天异步是大势所趋没什么疑问了写thread safe程序现在也是程序员必须要掌握的了吧
进入Programming版参与讨论
d****n
发帖数: 1637
61
你是卷舌头?L 和 R分不清那种?

【在 z****e 的大作中提到】
:
: 拼对了干嘛用?
: 撸字的辅音也不是r啊

z****e
发帖数: 54598
62

你以为java里面xml的部分不是build in的?
http不是build in的?
java.xml
java.net
都是标准pkg好伐?
不用安装你写个p啊

【在 d****n 的大作中提到】
: 嗯,不难,
: 老子的:
: go build
: 都不用装啥sbdk,也不用安装,就能用了。xml,http都是build in的

z****e
发帖数: 54598
63

lol
还是看不懂?
我在告诉你为啥我不care

【在 d****n 的大作中提到】
: 你是卷舌头?L 和 R分不清那种?
d****n
发帖数: 1637
64
啥?你说你为啥不cale?

【在 z****e 的大作中提到】
:
: lol
: 还是看不懂?
: 我在告诉你为啥我不care

z****e
发帖数: 54598
65

cale啥意思啊?不是个动词哈哈

【在 d****n 的大作中提到】
: 啥?你说你为啥不cale?
z****e
发帖数: 54598
66
这么说吧
我估计楼主的java代码已经写完了
真要多线程
就是三五行一个wrapper搞定的事
这个时候上什么worker,routin, dispatch q纯粹吃太饱了
也没有必要,如果非要这么折腾
那就直接上vert.x,马上就能用上worker了
代码都不用重写,直接wrapper就好了
本质上说,这些东西都是一个框架,只是有些语言做到了语言level中去
有些语言用类库来扩展,但是对付这种需求,显然是没有必要
w********m
发帖数: 1137
67
老赵又进入了胡吹模式,build from scratch,一看就没做过spider。
拉文件最怕的是堵塞,一个thread或者process在某个页面堵住,程序无法完成。最重
要的是异步,不是mutlithreading。
所以你首先得建个queue。另外还得建个set,避免重复。最后结果要存到db。
我就提供个国人的轮子吧,pyspider。

【在 z****e 的大作中提到】
: 并发处理
: 别听楼上胡扯
: process多开几个你就麻烦了
: 我的机器每次都被chrome的process拖得受不了
: 直接开threads并发处理就好了
: 但是不管怎样,我估计都很难压缩到几个小时内完成
: 除非你有很多计算资源
: 除了多个threads以外,你还可以把你已经处理过的结果给cache起来
: 放到db啊,nosql里面去,这样就不用每次都去parse xml了
: 下次再访问的话,直接查db,db访问要快得多

z****e
发帖数: 54598
68

疯了,楼主现在单线程程序都能跑3天,你凭啥认为会blocked?
要真blocked的话,这3天都怎么过来的?
如果3天不会blocked的话,爆出多个threads就会blocked了?
这好像也不对啊,目测多线程对于这种容错性更强啊,相对于一个thread而言
真要搞异步的话,vert.x也是天然异步处理,还q什么哦

【在 w********m 的大作中提到】
: 老赵又进入了胡吹模式,build from scratch,一看就没做过spider。
: 拉文件最怕的是堵塞,一个thread或者process在某个页面堵住,程序无法完成。最重
: 要的是异步,不是mutlithreading。
: 所以你首先得建个queue。另外还得建个set,避免重复。最后结果要存到db。
: 我就提供个国人的轮子吧,pyspider。

z****e
发帖数: 54598
69
另外文件有什么难的,如果怕connection broken的话
直接上tcp,把状态好好维护一下,如果broken的话
tcp socket会丢给你一个异常,然后catch住
自己在catch block里面重新连接就是了
还用什么框架和类库,楼主都说了,不要用
楼上还推荐,无语了都
w***g
发帖数: 5958
70
赵策基本上是胡吹。这种xml文件,如果已经下载下来了的话,
用python单线程一秒种可以parse 1000个(我刚刚在我的机器上测的)。
60万个如果只是parse的话,基本上就是10分钟的事情。用java或者go,
再快个十来倍问题不大。
楼主的问题是从ncbi抓文件怎么才能抓得快,并且不被发现。
我估计现在楼主应该已经被ban了。

【在 g*****n 的大作中提到】
: 小弟新手,恳请各位大侠指点。万分感激!
: 只用单个电脑, 不用hadoop/spark这些框架
: 网上有大约60万个xml文件,比如下面是一个:
: http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pub
: 需要解析每个文件,结果然后存在电脑上。现在的程序每次都要访问网上的文件,大约
: 耗时3天才能完成。
: 有没有更加高效的方法,快速完成?

相关主题
写thread safe程序现在也是程序员必须要掌握的了吧真正对异步有需求的应该是游戏类服务器
同步编程真郁闷vertx里面同一个module多个verticle的疑问
大家难道全是半路出家?Java的服务器一般运行几个线程比较合适?
进入Programming版参与讨论
d******e
发帖数: 2265
71
简单的python gevent.
复杂点scrapy(这戈软件实际很傻逼,典型的拿着oo硬套的作品)
后来,我自己写了个python batch和 scala batch的framework.
加了一些retry和throttling的东西。

【在 g*****n 的大作中提到】
: 小弟新手,恳请各位大侠指点。万分感激!
: 只用单个电脑, 不用hadoop/spark这些框架
: 网上有大约60万个xml文件,比如下面是一个:
: http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pub
: 需要解析每个文件,结果然后存在电脑上。现在的程序每次都要访问网上的文件,大约
: 耗时3天才能完成。
: 有没有更加高效的方法,快速完成?

d******e
发帖数: 2265
72
赵老师你没用过异步程序吧。
开100个green threads。本来三天
现在1个小时不到就跑完了。

【在 z****e 的大作中提到】
: 另外文件有什么难的,如果怕connection broken的话
: 直接上tcp,把状态好好维护一下,如果broken的话
: tcp socket会丢给你一个异常,然后catch住
: 自己在catch block里面重新连接就是了
: 还用什么框架和类库,楼主都说了,不要用
: 楼上还推荐,无语了都

d******e
发帖数: 2265
73

java不一定快10倍甚至更慢也可能。因为python掉的是lxml。
go里面有soup库吗?没有的话,这个速度也要打折扣。

【在 w***g 的大作中提到】
: 赵策基本上是胡吹。这种xml文件,如果已经下载下来了的话,
: 用python单线程一秒种可以parse 1000个(我刚刚在我的机器上测的)。
: 60万个如果只是parse的话,基本上就是10分钟的事情。用java或者go,
: 再快个十来倍问题不大。
: 楼主的问题是从ncbi抓文件怎么才能抓得快,并且不被发现。
: 我估计现在楼主应该已经被ban了。

g*****n
发帖数: 15
74
谢谢大家!
现在的问题是怎样batch下载这些60万个文件?

【在 w***g 的大作中提到】
: 赵策基本上是胡吹。这种xml文件,如果已经下载下来了的话,
: 用python单线程一秒种可以parse 1000个(我刚刚在我的机器上测的)。
: 60万个如果只是parse的话,基本上就是10分钟的事情。用java或者go,
: 再快个十来倍问题不大。
: 楼主的问题是从ncbi抓文件怎么才能抓得快,并且不被发现。
: 我估计现在楼主应该已经被ban了。

d****n
发帖数: 1637
75
我问你这60万个url怎么产生的?
其次,你要怎么保存xml?要存为strutured (database backend)?还是普通文件(plain
text)?

【在 g*****n 的大作中提到】
: 谢谢大家!
: 现在的问题是怎样batch下载这些60万个文件?

l**********n
发帖数: 8443
76
把60万个url读入内存,然后thread pool的thread进行处理啊。具体这个pool多大,就
不好说了

【在 g*****n 的大作中提到】
: 谢谢大家!
: 现在的问题是怎样batch下载这些60万个文件?

g*****g
发帖数: 34805
77
同步用apache httpclient, 异步用ning async httpclient,用Java写这个应该15分钟
,几十行够了。本来就是很简单的活,用啥语言都差不多。你们都吵了一天了。
l**********n
发帖数: 8443
78
各种装逼高级都来了。

【在 g*****g 的大作中提到】
: 同步用apache httpclient, 异步用ning async httpclient,用Java写这个应该15分钟
: ,几十行够了。本来就是很简单的活,用啥语言都差不多。你们都吵了一天了。

g*****g
发帖数: 34805
79
你丫还不服,这才几行的东西,现抄个例子,异步,要写本地文件的话加两行,要
configure各种timeout再加几行。
Connection Pool,keep alive啥的人都已经做好了。我老人家说过多少次,轮子是第
一生产力,你们成天吵语言。有空像我老熟悉一堆轮子,不比你们懂一堆语言有用多了。
import com.ning.http.client.*;
AsyncHttpClient asyncHttpClient = new AsyncHttpClient();
for(String url : urls) {
asyncHttpClient.prepareGet(url).execute(new AsyncCompletionHandler
(){
@Override
public Response onCompleted(Response response) throws Exception{
System.out.println(response);
return response;
}
@Override
public void onThrowable(Throwable t){
// Something wrong happened.
}
});
}

【在 l**********n 的大作中提到】
: 各种装逼高级都来了。
Z**0
发帖数: 1119
80
不要crawl,否则会被ban。我的同事干过,IP被ban。
这个网站提供ftp的批量下载。你自己仔细找找,不行的话,去问他们的管理员。

【在 g*****n 的大作中提到】
: 谢谢大家!
: 现在的问题是怎样batch下载这些60万个文件?

相关主题
An interview project: asynchronous socket programming看看大牛们为什么都远离.net
Obamacare website谁能说说同步/异步IO和阻塞/非阻塞IO的区别?
core java里有跟C++ std::async类似的东西吗?大牛们讨论一下异步编程吧
进入Programming版参与讨论
h**********c
发帖数: 4120
81
然后内寸卷或或者内存数据库
java 7 soap lib

【在 Z**0 的大作中提到】
: 不要crawl,否则会被ban。我的同事干过,IP被ban。
: 这个网站提供ftp的批量下载。你自己仔细找找,不行的话,去问他们的管理员。

z****e
发帖数: 54598
82
我什么时候说过xml已经下载了?
你应该想想那三天程序都在做什么
就是因为有了io,所以需要三天,你还测个p

【在 w***g 的大作中提到】
: 赵策基本上是胡吹。这种xml文件,如果已经下载下来了的话,
: 用python单线程一秒种可以parse 1000个(我刚刚在我的机器上测的)。
: 60万个如果只是parse的话,基本上就是10分钟的事情。用java或者go,
: 再快个十来倍问题不大。
: 楼主的问题是从ncbi抓文件怎么才能抓得快,并且不被发现。
: 我估计现在楼主应该已经被ban了。

z****e
发帖数: 54598
83

这个就是扯蛋了
异步本质上也就是启动一个thread交给worker的thread pool去操作
除非你后续有类似返回的操作
否则本质上跟多线程效率是一样的
你说我没用过异步?
那我vert.x都在干嘛?
应该说是你没用过吧?

【在 d******e 的大作中提到】
: 赵老师你没用过异步程序吧。
: 开100个green threads。本来三天
: 现在1个小时不到就跑完了。

z****e
发帖数: 54598
84

就根据多少个core设置pool size
这已经达到了理论上的最大值
如果只有八个cores,就设置size = 8
跑8个threads,再多不可能了
当然8个之后,整个program会freezing
可以额外启动一个main thread,来做一点管理工作
比如中途打断线程,看看多少个xml被搞定了阿之类的
不过本质上没啥太大差别

【在 l**********n 的大作中提到】
: 把60万个url读入内存,然后thread pool的thread进行处理啊。具体这个pool多大,就
: 不好说了

d******e
发帖数: 2265
85
你那是java的。python 或者go都是这样的。
其他都是event 来了,把stack换掉一块,开始运行。结束了,yield.

【在 z****e 的大作中提到】
:
: 就根据多少个core设置pool size
: 这已经达到了理论上的最大值
: 如果只有八个cores,就设置size = 8
: 跑8个threads,再多不可能了
: 当然8个之后,整个program会freezing
: 可以额外启动一个main thread,来做一点管理工作
: 比如中途打断线程,看看多少个xml被搞定了阿之类的
: 不过本质上没啥太大差别

z****e
发帖数: 54598
86

这么说吧
有个常识你知道下
一般系统优化呢
有个技巧,就是把层与层之间的io操作减少
尤其是你这里从网络上下载文件
这种io肯定最为耗时
所以前面说了用cache,如果你能够先下载到本地
再从本地读取,硬盘的io肯定速度要超过网络的io
io的速度,网络最慢,其次硬盘,然后是内存
这个差异都是数量级的差异,如果网络io需要100s的话
硬盘大概10s,内存可能1s都不到,再往下l2,l1 cache之类的
其次你启动多个threads的话,你的cpu数量(#)*每个cpu的core数量(#)
是你处理的上限,剩下的启动再多thread也不会有太大的提升
反而会因为你的程序在不同thread之间切换,导致额外的overhead
所以你应该爆多个nodes这样理论上限就是
node#*cpu#*core#
而且你这种是属于理论上可以完全并行的处理
所以如果你能爆60万个cores在不同的nodes上的话
你理论上可以并行,最后也就是平均过去一个xml获取+处理的时间
当然你要申请到60万个来做这事也挺麻烦的
所以建议600000/100=6000,差不多,3天,3*24*3600/100=3*24*36
平均过去一个小时不到可以处理掉
一般的cloud,hpc你申请到一百个cores应该问题不大
把这两个结合一下,事情解决了
最后你用java肯定秒杀其他语言
别听其他人瞎吹,java的很多优化都是被封装的
很多时候不知道前人怎么做的,比知道怎么做的要好
因为知道了一点点,会装逼,自己会瞎搞,还不如不知道
实话说,java的很多工具,比如hashmap什么
要做得比它好,很难,benchmark最说明问题
很多语言甚至做到现在连servlet都不如
不知道都在折腾些什么东东

【在 g*****n 的大作中提到】
: 谢谢大家!
: 现在的问题是怎样batch下载这些60万个文件?

z****e
发帖数: 54598
87

这个东西跟event有屁关系
又不是什么响应时间和blocked的问题
人家又不需要你返回什么
处理xml怎么都需要computing
event能让cpu的计算速度提升还是让io速度变快?
如果两者都不行的话,event means nothing here
拜托,你到底知道不知道什么是event和异步?

【在 d******e 的大作中提到】
: 你那是java的。python 或者go都是这样的。
: 其他都是event 来了,把stack换掉一块,开始运行。结束了,yield.

z****e
发帖数: 54598
88

另外,一般情况下,我是不去装逼的
因为我知道,jvm里面有太多的high tech,你如果没有认真阅读过源代码
你是很渺小的,这个hotspot2013曾经解释过
大多数人手写的c++代码,其运行效率,反而不如java的运行效率
最典型的就是tomcat在web server benchmark上的表现
一直都位居前列,为啥?确切滴说,我不知道
http://www.techempower.com/benchmarks/#section=data-r10&hw=ec2&
系统内存优化这种东西,不是什么阿猫阿狗看几篇文章就能通篇领悟的
是人类几十年的积累,从smalltak开始,lars bak等人就在搞这些东东
几十年下来,这里面的精华,不是你什么花几个月就能全部弄懂的
所以我一般不愿意花时间在这些level上做优化,因为毫无意义
都是夜郎自大,你优化了半天,最后多半还是不如jvm的效率
不信你自己对比go和vert.x,自己把逻辑实现一下
试试就知道了,我有信心后者肯定干掉前者
实际上从techempower上反馈的结果看,undertow的效率高过go不要太多
就像wdong说的,java比python快十倍都不只
你居然开始分析起来了,这就是典型的自以为知道jvm是怎么搞的
这就是装逼在我看来,实际上从我动手的经验看
python岂止比java慢十倍哦,我当时用hashmap优化了一下java程序
几分钟最后几十秒就搞定了,同学用python跑了几个小时
xml的parse这种必然会大量用到hashmap这种数据结构
其效率比一般的什么dictionary要快太多,说这些没用
试试吧,自己动手试的结果最有说服力

【在 d******e 的大作中提到】
: 你那是java的。python 或者go都是这样的。
: 其他都是event 来了,把stack换掉一块,开始运行。结束了,yield.

z****e
发帖数: 54598
89
大多数语言,你优化得好了
也就是比java慢上几倍吧
如果优化得不好,慢上几十倍,很正常
http://www.techempower.com/benchmarks/#section=data-r10&hw=ec2&
如果你自己不知道为什么go在这个测试中表现比servlet糟糕的话
你自己替换jvm去优化,就是装逼,做的都是无用功
结果多半毫无意义,还不如无脑上java
说实话,我不相信这里有谁真的知道为什么go在这些测试中比一般的servlet糟糕
虽然jvm, go, tomcat都是开源的
当然自以为自己知道的不少,其实都是皮毛
g*****g
发帖数: 34805
90
我给的例子,用的ning async httpclient, 底下是Netty,用的是NIO, 在Linux上就是
epoll。你用啥语言到最底层不还是epoll。

【在 d******e 的大作中提到】
: 你那是java的。python 或者go都是这样的。
: 其他都是event 来了,把stack换掉一块,开始运行。结束了,yield.

相关主题
看了一下C#的async await看了一下Meteor很不错
parallel programming的复杂性分层/流行工具技术名词说了半天异步是大势所趋没什么疑问了
goodbug基本不会编程,就会吹牛逼说同步比异步快的根本不懂网站
进入Programming版参与讨论
z****e
发帖数: 54598
91

vert.x下面也是netty,undertow下面也是netty

【在 g*****g 的大作中提到】
: 我给的例子,用的ning async httpclient, 底下是Netty,用的是NIO, 在Linux上就是
: epoll。你用啥语言到最底层不还是epoll。

d******e
发帖数: 2265
92
epoll就是能海量开fd.这个和异步模型没有关系。
你就是不用epoll,最多少点好来。1000个并发。这个问题也够了。windows iocp也不
错。
但是,上层模型,要么你用connection pool,spawn thread被后台block住等结果,等
结果来了,oncompleted活着set future. 主线要么await。要么直接运行下去。
要么你替换当前stack,象python和go一样。
要么你想node. 不停的event loop.
那好,我说java是第一种,你要是不同意。你告诉我那种实现模型。我去学习去。

【在 g*****g 的大作中提到】
: 我给的例子,用的ning async httpclient, 底下是Netty,用的是NIO, 在Linux上就是
: epoll。你用啥语言到最底层不还是epoll。

z****e
发帖数: 54598
93

问题是spawn thread在这里有什么要做的吗?
楼主的程序不过是处理文件,你spawn thread返回了干什么呢?
跟楼主说hi?

【在 d******e 的大作中提到】
: epoll就是能海量开fd.这个和异步模型没有关系。
: 你就是不用epoll,最多少点好来。1000个并发。这个问题也够了。windows iocp也不
: 错。
: 但是,上层模型,要么你用connection pool,spawn thread被后台block住等结果,等
: 结果来了,oncompleted活着set future. 主线要么await。要么直接运行下去。
: 要么你替换当前stack,象python和go一样。
: 要么你想node. 不停的event loop.
: 那好,我说java是第一种,你要是不同意。你告诉我那种实现模型。我去学习去。

d******e
发帖数: 2265
94
spawn thread确切的说connection pool是ning async http client 的内部实现。

【在 z****e 的大作中提到】
:
: 问题是spawn thread在这里有什么要做的吗?
: 楼主的程序不过是处理文件,你spawn thread返回了干什么呢?
: 跟楼主说hi?

z****e
发帖数: 54598
95
所谓异步本质上就是不要block spawn thread的嘛
如果有很多并发进来的话,需要响应这些request的thread应该优先级比较高
就像ios的ui thread一样,如果不响应的话,用户就会唧唧歪歪
但是楼主的这个例子显然不对啊,楼主不需要响应啊
需要的是尽快完成处理,所以如果这个时候浪费一个thread在listener上
反而会降低处理的效率,没事老loop了做啥?
所以干脆就让它block住,直接处理文件去
g*****g
发帖数: 34805
96
epoll跟异步模型没关系?别跟我老瞎扯。
epoll is a Linux kernel system call, a scalable I/O event notification
mechanism。这就是异步IO
IO的速度本来就是下层,而不是上层决定的。connection pool并不会比node的event-
loop慢,你不服大可做benchmark。那个网站benchmark比较,undertow就是基于netty
的,秒杀了node. 另外,Netty当然不是spawn thread等结果,那个叫做同步IO,不叫异
步IO。

【在 d******e 的大作中提到】
: epoll就是能海量开fd.这个和异步模型没有关系。
: 你就是不用epoll,最多少点好来。1000个并发。这个问题也够了。windows iocp也不
: 错。
: 但是,上层模型,要么你用connection pool,spawn thread被后台block住等结果,等
: 结果来了,oncompleted活着set future. 主线要么await。要么直接运行下去。
: 要么你替换当前stack,象python和go一样。
: 要么你想node. 不停的event loop.
: 那好,我说java是第一种,你要是不同意。你告诉我那种实现模型。我去学习去。

c*********e
发帖数: 16335
97
用下面这个链接就是json的format了。你可以用javascript的regular expression处理
了。
http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pub
也可以用node.js, 一个thread, async搞定。

【在 g*****n 的大作中提到】
: 小弟新手,恳请各位大侠指点。万分感激!
: 只用单个电脑, 不用hadoop/spark这些框架
: 网上有大约60万个xml文件,比如下面是一个:
: http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pub
: 需要解析每个文件,结果然后存在电脑上。现在的程序每次都要访问网上的文件,大约
: 耗时3天才能完成。
: 有没有更加高效的方法,快速完成?

c*********e
发帖数: 16335
98
这个。。。现在不是流行callable吗?

【在 z****e 的大作中提到】
: 所谓异步本质上就是不要block spawn thread的嘛
: 如果有很多并发进来的话,需要响应这些request的thread应该优先级比较高
: 就像ios的ui thread一样,如果不响应的话,用户就会唧唧歪歪
: 但是楼主的这个例子显然不对啊,楼主不需要响应啊
: 需要的是尽快完成处理,所以如果这个时候浪费一个thread在listener上
: 反而会降低处理的效率,没事老loop了做啥?
: 所以干脆就让它block住,直接处理文件去

z****e
发帖数: 54598
99

netty
它说的是替换当前stack,但是这种操作同样有成本
世界上没有免费的午餐,异步本质上就是让request进来之后
能够及时得到响应,等于随时可以找到threads来伺候这些requests
从而达到尽快响应的目的,增强客户体验
但是这个跟楼主的需求没有一点关系
另外event loop也有好处
就是看这种优先级比较高的thread是否会被频繁访问
如果不被频繁访问的话,在stack中插入一部分东东也许能够有效一点
但是如果频繁访问的话,就像web server这种
显然event loop会更有效,直接丢一个或者多个thread专门伺候requests
然后别打断这些threads,所以vert.x, undertow这些在techempower上能够干掉go
当然我相信原因很多,这只是其中一个
听说go的gc效率也一般,不知道
这个我相信这里没有人真的把go和jvm全部读懂了的
两个都是black boxes,所以无脑看benchmark就是了
然后自己试试,小马过河还是自己试最有用
这么大东西分析来分析去都有些瞎子摸象
我相信event loop是一个极端
同步彻底block是另外一个极端,然后在stack中插入居于两者之间
对于web来说,event loop其实很顶用,这个也是大多数情况
因为server最重要的任务就是伺候client的request
同步则对于楼主这种需求来说最有效,因为没有东西需要响应,返回了干什么?
不来搭理用户,用全力伺候xml的processing,我相信这个效率最高
搭理用户,怎么做都有成本,因为需要打断当前处理
至于中间怎么balance,我觉得没啥太大意义

【在 g*****g 的大作中提到】
: epoll跟异步模型没关系?别跟我老瞎扯。
: epoll is a Linux kernel system call, a scalable I/O event notification
: mechanism。这就是异步IO
: IO的速度本来就是下层,而不是上层决定的。connection pool并不会比node的event-
: loop慢,你不服大可做benchmark。那个网站benchmark比较,undertow就是基于netty
: 的,秒杀了node. 另外,Netty当然不是spawn thread等结果,那个叫做同步IO,不叫异
: 步IO。

g*****g
发帖数: 34805
100
真要追求效率。经典的处理就是下载异步,parsing同步,各起一个线程池就对了。在
parsing上Java支持多线程要比Python, Node方便多了。还是那句话,轮子是第一生产
力,我老花一分钟C&P的代码,支持NIO, connection pool, keep alive,比你们拿啥
语言
100行写的都强多了。
相关主题
asynchronous vs non-blocking大家难道全是半路出家?
写thread safe程序现在也是程序员必须要掌握的了吧真正对异步有需求的应该是游戏类服务器
同步编程真郁闷vertx里面同一个module多个verticle的疑问
进入Programming版参与讨论
d****n
发帖数: 1637
101
脑筋太僵化了,你说的那是parallel 不是concurrent.
parallel 已经过时了,请不要在灌输老东西了

【在 g*****g 的大作中提到】
: 真要追求效率。经典的处理就是下载异步,parsing同步,各起一个线程池就对了。在
: parsing上Java支持多线程要比Python, Node方便多了。还是那句话,轮子是第一生产
: 力,我老花一分钟C&P的代码,支持NIO, connection pool, keep alive,比你们拿啥
: 语言
: 100行写的都强多了。

g*****g
发帖数: 34805
102
你丫看不懂我的代码我也懒得教育你。你也就学了个 Go的皮毛,啥叫 Non blocking
IO 都没整明白。写了一堆代码,connection pool, keep alive都没实现。性能被我那
10行秒妥妥的,不信自己去试。

【在 d****n 的大作中提到】
: 脑筋太僵化了,你说的那是parallel 不是concurrent.
: parallel 已经过时了,请不要在灌输老东西了

N********n
发帖数: 8363
103
多开几个THREAD并发处理,每个THREAD用异步ASYNC下载XML文件。
http://stackoverflow.com/questions/16514027/download-multiple-f
N********n
发帖数: 8363
104

这是典型需要异步的场合。否则THREAD抱住CPU死等HTTP REQUEST返回,效率很低。

【在 z****e 的大作中提到】
:
: netty
: 它说的是替换当前stack,但是这种操作同样有成本
: 世界上没有免费的午餐,异步本质上就是让request进来之后
: 能够及时得到响应,等于随时可以找到threads来伺候这些requests
: 从而达到尽快响应的目的,增强客户体验
: 但是这个跟楼主的需求没有一点关系
: 另外event loop也有好处
: 就是看这种优先级比较高的thread是否会被频繁访问
: 如果不被频繁访问的话,在stack中插入一部分东东也许能够有效一点

w***g
发帖数: 5958
105
昨天看了一眼,今天又学习了一边。这几行程序很有说服力。轮子确实牛屄!

了。
Response>

【在 g*****g 的大作中提到】
: 你丫还不服,这才几行的东西,现抄个例子,异步,要写本地文件的话加两行,要
: configure各种timeout再加几行。
: Connection Pool,keep alive啥的人都已经做好了。我老人家说过多少次,轮子是第
: 一生产力,你们成天吵语言。有空像我老熟悉一堆轮子,不比你们懂一堆语言有用多了。
: import com.ning.http.client.*;
: AsyncHttpClient asyncHttpClient = new AsyncHttpClient();
: for(String url : urls) {
: asyncHttpClient.prepareGet(url).execute(new AsyncCompletionHandler
: (){
: @Override

d****n
发帖数: 1637
106
煞笔javar就是你这个样子

【在 g*****g 的大作中提到】
: 你丫看不懂我的代码我也懒得教育你。你也就学了个 Go的皮毛,啥叫 Non blocking
: IO 都没整明白。写了一堆代码,connection pool, keep alive都没实现。性能被我那
: 10行秒妥妥的,不信自己去试。

x*******1
发帖数: 28835
107
用bounded blocking Queue, N个线程抓网页到Queue, 其他线程取出来就
坐parse 。 经典的生产者,消费者模型。
x*******1
发帖数: 28835
108
Bounded BlockingQueue
g*****g
发帖数: 34805
109
代码就在那里,是个人都能跑。你丫被打脸死撑有用吗?

【在 d****n 的大作中提到】
: 煞笔javar就是你这个样子
c*********e
发帖数: 16335
110
parallel是multi-core才能实现。

【在 d****n 的大作中提到】
: 脑筋太僵化了,你说的那是parallel 不是concurrent.
: parallel 已经过时了,请不要在灌输老东西了

相关主题
vertx里面同一个module多个verticle的疑问Obamacare website
Java的服务器一般运行几个线程比较合适?core java里有跟C++ std::async类似的东西吗?
An interview project: asynchronous socket programming看看大牛们为什么都远离.net
进入Programming版参与讨论
z****e
发帖数: 54598
111

返回了没有意义啊
一般thread返回了之后有后续操作才需要async
楼主没有后续操作,如果parse的话,怎样都需要等下载完成之后再开始
不用同步的话就要上callback
本质上是一样的
异步主要用途是ui部分
因为ui部分需要及时处理客户的指令
所以不宜让整个thread block住
所以几乎所有的ui都有异步
node和go那些都是后来者
ios和swing早就有异步了
最典型的应用就是当你点击ui上一个btn的时候
如果不想ui thread被blocked,就一定会上async

【在 N********n 的大作中提到】
:
: 这是典型需要异步的场合。否则THREAD抱住CPU死等HTTP REQUEST返回,效率很低。

N********n
发帖数: 8363
112

发出HTTP REQUEST时就该ASYNC,这是典型消耗时间的I/O操作。发出REQUEST后
THREAD应该放弃CPU让其他THREAD运行,等REQUEST返回之后再CONTINUE。ASYNC
是CLIENTSERVER通用,所以.NET才把其实现为标准SUPPORT。

【在 z****e 的大作中提到】
:
: 返回了没有意义啊
: 一般thread返回了之后有后续操作才需要async
: 楼主没有后续操作,如果parse的话,怎样都需要等下载完成之后再开始
: 不用同步的话就要上callback
: 本质上是一样的
: 异步主要用途是ui部分
: 因为ui部分需要及时处理客户的指令
: 所以不宜让整个thread block住
: 所以几乎所有的ui都有异步

z****e
发帖数: 54598
113
“放弃CPU让其他THREAD运行”
问题是这里没有其他的thread需要运行
除了下载和parse以外,还有什么事情需要做的吗?
一般server需要监听port,及时响应客户端发送过来的request
如果是ui的话,也需要监听用户的input,这些需求都需要有thread来伺候
问题是楼主这里都没有这些需求,放弃了cpu给谁用?
还不是一样给这个程序用,放弃了干什么?放弃了的cpu也还是还给这些threads
就让这几个threads全负荷运转就好了

【在 N********n 的大作中提到】
:
: 发出HTTP REQUEST时就该ASYNC,这是典型消耗时间的I/O操作。发出REQUEST后
: THREAD应该放弃CPU让其他THREAD运行,等REQUEST返回之后再CONTINUE。ASYNC
: 是CLIENTSERVER通用,所以.NET才把其实现为标准SUPPORT。

z****e
发帖数: 54598
114
而且这里如果强行把下载和parse做成两个threads的话
反而有可能更慢,因为下载的速度肯定远慢过parse的速度
前面解释了网络io要比硬盘io以及内存io要慢上至少一个数量级
所以下载完成之前,很容易造成有parse的threads无事可做
然后不停滴check共享的部分里面是否还有新的xml文件
这就浪费了cpu不是?所以这里异步自找麻烦了
干脆就同步,就让它blocked后面的代码
因为下载完成之后显然才可以开始parse
下载都没完成,parse个p
而且同步写起来还简单,不用callback
对于这么简单的需求,我个人认为直接上Thread搞定
三行代码就行了,不用自找麻烦,效率应该反而最高
楼主有兴趣可以对比我最开始说的那三个
Thread t1 = new Thread();
这种方式,然后把下载和parse全部塞进去
应该会超过古德霸那部分代码,试试看,反正都很容易写
N********n
发帖数: 8363
115

下载和PARSE都在一个THREAD里面。可以一次开20个THREAD并行,把所有XML URL放
在一个POOL里面。每次每个THREAD去POOL里抓200个URL来处理,处理完再去抓200
直到全做完。这样一个THREAD在ASYNC等待时其他拿到XML的THREAD可以PARSE。基
本上就是模拟SERVER端用ASYNC提高MULTI-REQUEST执行效率。

【在 z****e 的大作中提到】
: 而且这里如果强行把下载和parse做成两个threads的话
: 反而有可能更慢,因为下载的速度肯定远慢过parse的速度
: 前面解释了网络io要比硬盘io以及内存io要慢上至少一个数量级
: 所以下载完成之前,很容易造成有parse的threads无事可做
: 然后不停滴check共享的部分里面是否还有新的xml文件
: 这就浪费了cpu不是?所以这里异步自找麻烦了
: 干脆就同步,就让它blocked后面的代码
: 因为下载完成之后显然才可以开始parse
: 下载都没完成,parse个p
: 而且同步写起来还简单,不用callback

d****n
发帖数: 1637
116
不能动态规划threads使用真是侮辱concurrent.
智商捉急的节奏~~~

【在 z****e 的大作中提到】
: 而且这里如果强行把下载和parse做成两个threads的话
: 反而有可能更慢,因为下载的速度肯定远慢过parse的速度
: 前面解释了网络io要比硬盘io以及内存io要慢上至少一个数量级
: 所以下载完成之前,很容易造成有parse的threads无事可做
: 然后不停滴check共享的部分里面是否还有新的xml文件
: 这就浪费了cpu不是?所以这里异步自找麻烦了
: 干脆就同步,就让它blocked后面的代码
: 因为下载完成之后显然才可以开始parse
: 下载都没完成,parse个p
: 而且同步写起来还简单,不用callback

w**z
发帖数: 8232
117
一般机器开几百个线程没压力。block 就block 了。

【在 N********n 的大作中提到】
:
: 下载和PARSE都在一个THREAD里面。可以一次开20个THREAD并行,把所有XML URL放
: 在一个POOL里面。每次每个THREAD去POOL里抓200个URL来处理,处理完再去抓200
: 直到全做完。这样一个THREAD在ASYNC等待时其他拿到XML的THREAD可以PARSE。基
: 本上就是模拟SERVER端用ASYNC提高MULTI-REQUEST执行效率。

N********n
发帖数: 8363
118

那是CLIENT端,SERVER端也这么随便BLOCK量一上来就爆。养成好习惯,这年头写程序
不用异步浑身不舒服。

【在 w**z 的大作中提到】
: 一般机器开几百个线程没压力。block 就block 了。
w**z
发帖数: 8232
119
哥就是搞server 的。这种量级的东西,随便搞,也搞不爆的。你们都over
engineering.

【在 N********n 的大作中提到】
:
: 那是CLIENT端,SERVER端也这么随便BLOCK量一上来就爆。养成好习惯,这年头写程序
: 不用异步浑身不舒服。

N********n
发帖数: 8363
120

所以你水平也就一般吗。异步I/O提高系统系统效率是常识,同样是上量别人400台
SERVER异步能解决的,你非要跑1000台BLOCK I/O,还硬撑。

【在 w**z 的大作中提到】
: 哥就是搞server 的。这种量级的东西,随便搞,也搞不爆的。你们都over
: engineering.

相关主题
谁能说说同步/异步IO和阻塞/非阻塞IO的区别?parallel programming的复杂性分层/流行工具技术名词
大牛们讨论一下异步编程吧goodbug基本不会编程,就会吹牛逼
看了一下C#的async await看了一下Meteor很不错
进入Programming版参与讨论
l**********n
发帖数: 8443
121
java 有async httpclient啊。当然可以异步。

【在 N********n 的大作中提到】
:
: 所以你水平也就一般吗。异步I/O提高系统系统效率是常识,同样是上量别人400台
: SERVER异步能解决的,你非要跑1000台BLOCK I/O,还硬撑。

g*****g
发帖数: 34805
122
你们都不用试了,这个活5年前我干过,每秒百万级的Url处理。异步IO,同步处理,你
要比那个快不是一般的难。

【在 z****e 的大作中提到】
: 而且这里如果强行把下载和parse做成两个threads的话
: 反而有可能更慢,因为下载的速度肯定远慢过parse的速度
: 前面解释了网络io要比硬盘io以及内存io要慢上至少一个数量级
: 所以下载完成之前,很容易造成有parse的threads无事可做
: 然后不停滴check共享的部分里面是否还有新的xml文件
: 这就浪费了cpu不是?所以这里异步自找麻烦了
: 干脆就同步,就让它blocked后面的代码
: 因为下载完成之后显然才可以开始parse
: 下载都没完成,parse个p
: 而且同步写起来还简单,不用callback

p***o
发帖数: 1252
123
百万级要调hosts或自己架DNS吗?

【在 g*****g 的大作中提到】
: 你们都不用试了,这个活5年前我干过,每秒百万级的Url处理。异步IO,同步处理,你
: 要比那个快不是一般的难。

g*****g
发帖数: 34805
124
要你poll的网站不会把你封掉。

【在 p***o 的大作中提到】
: 百万级要调hosts或自己架DNS吗?
N********n
发帖数: 8363
125

我说一定要异步,楼上却说那是OE。

【在 l**********n 的大作中提到】
: java 有async httpclient啊。当然可以异步。
g*****g
发帖数: 34805
126
从头写我也懒得异步,不过现成类库在,异步同步没啥区别。

【在 N********n 的大作中提到】
:
: 我说一定要异步,楼上却说那是OE。

w**z
发帖数: 8232
127
你先搞清楚要求,一共才60万个网页,还不是real time。只要不是serial process,怎
么搞都可以。
goodbug 说的要每秒百万级的,当然要花点心思搞。

【在 N********n 的大作中提到】
:
: 我说一定要异步,楼上却说那是OE。

c*********e
发帖数: 16335
128
能不能先异步IO,然后异步处理?

【在 g*****g 的大作中提到】
: 你们都不用试了,这个活5年前我干过,每秒百万级的Url处理。异步IO,同步处理,你
: 要比那个快不是一般的难。

z****e
发帖数: 54598
129
白痴,无论怎么做都是浪费cpu资源,怎么做都需要额外的cpu资源予以配合
直接将thread数量调整为core数量,已经是计算能力的上限
这都看不懂,还说个鸟啊,可以说这个东西通过某些小规模计算以节省更大规模的浪费
但是再小规模的计算,都比不做要浪费计算资源

【在 d****n 的大作中提到】
: 不能动态规划threads使用真是侮辱concurrent.
: 智商捉急的节奏~~~

z****e
发帖数: 54598
130

那这个异步在哪里?
下载和parse都在一个thread里面
spawn thread把其他thread启动并run起来
然后自己进而执行到下载并parse里面去
酱紫就已经达到了cpu处理的上限
已经全负荷在下载+parse了
异步能让程序不blocking,问题是程序又没有其他东西要做
看不出block和nblock有什么太大区别,nblock写起来代码还比较恶心
这么简单需求,直接thread搞定,剩下的都是没事找事
non blocking是为了让后续代码得以执行
问题这里根本就没有后续代码,整个thread就block了又怎样?
cpu一直都在处理这个任务,没有任何的浪费,看不出有异步的需求在这里面
异步最典型的应用是用来伺候requests的,这里的request数量为0
楼主做的又不是server,也不是ui,不需要浪费异步在这个layer上
唯一可能就是spawn thread在等着这些thread返回
那这样的话,你直接上Future就搞定了,然后spawn thread立即销毁
然后后台的threads一直在运行,一般干活的时候,这个spawn thread会留着
等着接收一些指令,比如中途打断几个thread之类的
但是我觉得没有必要,楼主连thread概念都没有,这越做越复杂了
最简单的方式往往最合适

【在 N********n 的大作中提到】
:
: 我说一定要异步,楼上却说那是OE。

相关主题
说了半天异步是大势所趋没什么疑问了写thread safe程序现在也是程序员必须要掌握的了吧
说同步比异步快的根本不懂网站同步编程真郁闷
asynchronous vs non-blocking大家难道全是半路出家?
进入Programming版参与讨论
g*****g
发帖数: 34805
131
IO 异步有意义,parsing同步异步没什么差别,后者是 CPU intensive.

【在 c*********e 的大作中提到】
: 能不能先异步IO,然后异步处理?
c********l
发帖数: 125
132
好虫确实牛比,学习了。
好虫再给说说哪些轮子值得看看的。
很多时候知道有这么个轮子用到的时候再看都好,就怕自己哼嗤哼嗤写半天发现人家早
实现这功能了。自己性能还不如人家/10

了。
Response>

【在 g*****g 的大作中提到】
: 你丫还不服,这才几行的东西,现抄个例子,异步,要写本地文件的话加两行,要
: configure各种timeout再加几行。
: Connection Pool,keep alive啥的人都已经做好了。我老人家说过多少次,轮子是第
: 一生产力,你们成天吵语言。有空像我老熟悉一堆轮子,不比你们懂一堆语言有用多了。
: import com.ning.http.client.*;
: AsyncHttpClient asyncHttpClient = new AsyncHttpClient();
: for(String url : urls) {
: asyncHttpClient.prepareGet(url).execute(new AsyncCompletionHandler
: (){
: @Override

d****n
发帖数: 1637
133
你那个煞笔model用bash就足够了.
NumbThread=10
cur=0
for url in `cat url_list.txt`;do
if ((cur < NumbThread))
then
cur=$((cur+1))
timeout 5 curl -O $url &
else
wait
cur=0
fi
done
偷偷跑完了,告诉爷爽不爽。
就你那智商还搞threads,多写几个hello world吧

【在 z****e 的大作中提到】
: 白痴,无论怎么做都是浪费cpu资源,怎么做都需要额外的cpu资源予以配合
: 直接将thread数量调整为core数量,已经是计算能力的上限
: 这都看不懂,还说个鸟啊,可以说这个东西通过某些小规模计算以节省更大规模的浪费
: 但是再小规模的计算,都比不做要浪费计算资源

z****e
发帖数: 54598
134
笑死人了你到底看懂我在说什么了没有啊?
你个白痴,这里总共就两步,优化个鸟啊
你以为你这不是hello world?
脑残

【在 d****n 的大作中提到】
: 你那个煞笔model用bash就足够了.
: NumbThread=10
: cur=0
: for url in `cat url_list.txt`;do
: if ((cur < NumbThread))
: then
: cur=$((cur+1))
: timeout 5 curl -O $url &
: else
: wait

d****n
发帖数: 1637
135
simplicity is hard to achieve. you such moron will never understand.
Do everything in what you have learned from messy google.
you can never create anything yourself. lol
整天满嘴跑vertx,又不是你写的,吹jb啥啊?连use case都不清楚,还程序猿呢。
你吗用手枪的时候总端出来个大炮,不是煞笔是啥?

【在 z****e 的大作中提到】
: 笑死人了你到底看懂我在说什么了没有啊?
: 你个白痴,这里总共就两步,优化个鸟啊
: 你以为你这不是hello world?
: 脑残

z****e
发帖数: 54598
136

lol
你那边两个垃圾循环,还simplicity,你丫的多加几个parse进去
别人看了恨不得操你妈五十六次,你还真觉得自己牛逼了?
就这么简单的逻辑,你丫塞进去两个循环,简单在哪?
不用parse了是吧?

【在 d****n 的大作中提到】
: simplicity is hard to achieve. you such moron will never understand.
: Do everything in what you have learned from messy google.
: you can never create anything yourself. lol
: 整天满嘴跑vertx,又不是你写的,吹jb啥啊?连use case都不清楚,还程序猿呢。
: 你吗用手枪的时候总端出来个大炮,不是煞笔是啥?

d****n
发帖数: 1637
137
不,我觉得你是煞笔
parse你麻痹啊,下载下来再搞第2步,想怎么搞就怎么搞,老几吧parse你个几吧,都
不知到人家要咋用就开始吹,真是大煞笔

【在 z****e 的大作中提到】
:
: lol
: 你那边两个垃圾循环,还simplicity,你丫的多加几个parse进去
: 别人看了恨不得操你妈五十六次,你还真觉得自己牛逼了?
: 就这么简单的逻辑,你丫塞进去两个循环,简单在哪?
: 不用parse了是吧?

d****n
发帖数: 1637
138
你们公司也是个煞笔公司,雇佣你这个整天啥也不知到就tm再这装比的煞笔。
真浪费你的pay check了

【在 z****e 的大作中提到】
:
: lol
: 你那边两个垃圾循环,还simplicity,你丫的多加几个parse进去
: 别人看了恨不得操你妈五十六次,你还真觉得自己牛逼了?
: 就这么简单的逻辑,你丫塞进去两个循环,简单在哪?
: 不用parse了是吧?

z****e
发帖数: 54598
139

lol
轮子是第一生产力
我不认为你个傻屌有造轮子的本事
别装了,哎哟,就你这个鸟样,装啥呢
谁不懂use case呢?你连non blocking到现在都没看懂
你丫居然不知道古德霸那些其实就是worker哈哈
什么是手枪?Thread t = new Thread(); t.start();
这就是手枪,你个傻屌非要上大炮,然后回头来把自己骂成煞笔
我也很佩服你的逻辑,我老用你自己的话屌你是不是很有趣啊?

【在 d****n 的大作中提到】
: simplicity is hard to achieve. you such moron will never understand.
: Do everything in what you have learned from messy google.
: you can never create anything yourself. lol
: 整天满嘴跑vertx,又不是你写的,吹jb啥啊?连use case都不清楚,还程序猿呢。
: 你吗用手枪的时候总端出来个大炮,不是煞笔是啥?

z****e
发帖数: 54598
140

哈哈哈
下载了人家更新了怎么办?
重新下载?哈哈
白痴

【在 d****n 的大作中提到】
: 不,我觉得你是煞笔
: parse你麻痹啊,下载下来再搞第2步,想怎么搞就怎么搞,老几吧parse你个几吧,都
: 不知到人家要咋用就开始吹,真是大煞笔

相关主题
大家难道全是半路出家?Java的服务器一般运行几个线程比较合适?
真正对异步有需求的应该是游戏类服务器An interview project: asynchronous socket programming
vertx里面同一个module多个verticle的疑问Obamacare website
进入Programming版参与讨论
z****e
发帖数: 54598
141

装你妈的逼啊
你们公司是个赔钱的煞笔公司
居然用.net,给微软送钱
你也就是只配给人送钱的煞笔了

【在 d****n 的大作中提到】
: 你们公司也是个煞笔公司,雇佣你这个整天啥也不知到就tm再这装比的煞笔。
: 真浪费你的pay check了

d****n
发帖数: 1637
142
你今天又糟蹋公司给你的钱了

【在 z****e 的大作中提到】
:
: 装你妈的逼啊
: 你们公司是个赔钱的煞笔公司
: 居然用.net,给微软送钱
: 你也就是只配给人送钱的煞笔了

z****e
发帖数: 54598
143

哈哈哈,白痴又在骂自己鸟

【在 d****n 的大作中提到】
: 你今天又糟蹋公司给你的钱了
d****n
发帖数: 1637
144
等一会看你干爹古的霸来助阵

【在 z****e 的大作中提到】
:
: 哈哈哈,白痴又在骂自己鸟

z****e
发帖数: 54598
145
你认了个爷爷给我丢人
我觉得很羞愧

【在 d****n 的大作中提到】
: 等一会看你干爹古的霸来助阵
d****n
发帖数: 1637
146
他真是你爹啊?
他给我提鞋都不要,太老

【在 z****e 的大作中提到】
: 你认了个爷爷给我丢人
: 我觉得很羞愧

z****e
发帖数: 54598
147

lol
要不然怎么会说你乱认爷爷呢?
我感到非常气愤

【在 d****n 的大作中提到】
: 他真是你爹啊?
: 他给我提鞋都不要,太老

d****n
发帖数: 1637
148
别气氛了,你干爹正上班呢,一会就来帮你出气。
奇怪你干爹个装比贩子养出你这么个煞笔儿子

【在 z****e 的大作中提到】
:
: lol
: 要不然怎么会说你乱认爷爷呢?
: 我感到非常气愤

z****e
发帖数: 54598
149

lol
我操你妈五六次了,还需要出什么气?
有什么气都操进你妈逼里去了

【在 d****n 的大作中提到】
: 别气氛了,你干爹正上班呢,一会就来帮你出气。
: 奇怪你干爹个装比贩子养出你这么个煞笔儿子

d****n
发帖数: 1637
150
养步教,父之过也。等你爹下班

【在 z****e 的大作中提到】
:
: lol
: 我操你妈五六次了,还需要出什么气?
: 有什么气都操进你妈逼里去了

相关主题
core java里有跟C++ std::async类似的东西吗?大牛们讨论一下异步编程吧
看看大牛们为什么都远离.net看了一下C#的async await
谁能说说同步/异步IO和阻塞/非阻塞IO的区别?parallel programming的复杂性分层/流行工具技术名词
进入Programming版参与讨论
z****e
发帖数: 54598
151

那是,看到你,我就感到深深的难过
要不然怎么会非常气愤呢?

【在 d****n 的大作中提到】
: 养步教,父之过也。等你爹下班
d****n
发帖数: 1637
152
别难过,我再给你找个月光妈。乖~~

【在 z****e 的大作中提到】
:
: 那是,看到你,我就感到深深的难过
: 要不然怎么会非常气愤呢?

z****e
发帖数: 54598
153

你妈还没死呢

【在 d****n 的大作中提到】
: 别难过,我再给你找个月光妈。乖~~
N********n
发帖数: 8363
154

"其他东西"就是发下个request,老大。当你异步等一个web request时,你给系统
一个callback method,或者靠语言支持生成一个continuation。request返回后会
按照你的cb或者conti去执行parse。你的异步程序不会抱着cpu等那个request,这
时你就可以去发下个request,异步效率就是这样上去的。
.Net支持async/await, 可以用脚趾头写NBLOCK代码,几乎和BLOCK代码一样简单,
不用CB。参见楼上SOF链接里的例子。等哪天JAVA也引进async/await你就明白了。

【在 z****e 的大作中提到】
:
: 你妈还没死呢

d****n
发帖数: 1637
155
赵厕的手指头跟别人脚指头一样灵活

【在 N********n 的大作中提到】
:
: "其他东西"就是发下个request,老大。当你异步等一个web request时,你给系统
: 一个callback method,或者靠语言支持生成一个continuation。request返回后会
: 按照你的cb或者conti去执行parse。你的异步程序不会抱着cpu等那个request,这
: 时你就可以去发下个request,异步效率就是这样上去的。
: .Net支持async/await, 可以用脚趾头写NBLOCK代码,几乎和BLOCK代码一样简单,
: 不用CB。参见楼上SOF链接里的例子。等哪天JAVA也引进async/await你就明白了。

g*****g
发帖数: 34805
156
你说得很好,明明10行代码,1分钟C&P就能写出来的东西,非要吭哧吭哧写100行还拿
出来现,这不是傻逼吗?我就不说Connection pool, keep-alive这些及其重要影响性
能的东西还没实现。
简单就是要懂得使用轮子,要组装个车你现做轮子,别人都开到目的地呢你还做轮子呢。

【在 d****n 的大作中提到】
: simplicity is hard to achieve. you such moron will never understand.
: Do everything in what you have learned from messy google.
: you can never create anything yourself. lol
: 整天满嘴跑vertx,又不是你写的,吹jb啥啊?连use case都不清楚,还程序猿呢。
: 你吗用手枪的时候总端出来个大炮,不是煞笔是啥?

l**********n
发帖数: 8443
157
请问用纯异步的比如nodejs就可以了?

【在 N********n 的大作中提到】
:
: "其他东西"就是发下个request,老大。当你异步等一个web request时,你给系统
: 一个callback method,或者靠语言支持生成一个continuation。request返回后会
: 按照你的cb或者conti去执行parse。你的异步程序不会抱着cpu等那个request,这
: 时你就可以去发下个request,异步效率就是这样上去的。
: .Net支持async/await, 可以用脚趾头写NBLOCK代码,几乎和BLOCK代码一样简单,
: 不用CB。参见楼上SOF链接里的例子。等哪天JAVA也引进async/await你就明白了。

l**********n
发帖数: 8443
158
我估计60万个,用nodejs几分钟就搞完了,xml 或者json parse, save to disk, 我也
搞成异步的

【在 l**********n 的大作中提到】
: 请问用纯异步的比如nodejs就可以了?
l**********n
发帖数: 8443
159
就异步来说,nodejs的promise是最好的,.net也还行,scala也不错。java不是很方便

【在 l**********n 的大作中提到】
: 我估计60万个,用nodejs几分钟就搞完了,xml 或者json parse, save to disk, 我也
: 搞成异步的

g*****g
发帖数: 34805
160
还不方便哪?无论你怎么写,要比那几行代码还简单也不容易。性能绝对不会比 node
差。异步是一个不常用的 use case, 做进类库足够了,做进语言没什么必要。又不是
比写异步轮子用哪个语言方便。

【在 l**********n 的大作中提到】
: 就异步来说,nodejs的promise是最好的,.net也还行,scala也不错。java不是很方便
相关主题
goodbug基本不会编程,就会吹牛逼说同步比异步快的根本不懂网站
看了一下Meteor很不错asynchronous vs non-blocking
说了半天异步是大势所趋没什么疑问了写thread safe程序现在也是程序员必须要掌握的了吧
进入Programming版参与讨论
N********n
发帖数: 8363
161

Node要写callback吧,用惯了async/await不想写CB了。听说JS也要引进async/await。

【在 l**********n 的大作中提到】
: 请问用纯异步的比如nodejs就可以了?
l**********n
发帖数: 8443
162
不写cb也很容易。你只要告诉control flow你的statement全是异步的,全返回promise
.

【在 N********n 的大作中提到】
:
: Node要写callback吧,用惯了async/await不想写CB了。听说JS也要引进async/await。

d****n
发帖数: 1637
163
赵厕来,你干爹下班来帮你了

呢。

【在 g*****g 的大作中提到】
: 你说得很好,明明10行代码,1分钟C&P就能写出来的东西,非要吭哧吭哧写100行还拿
: 出来现,这不是傻逼吗?我就不说Connection pool, keep-alive这些及其重要影响性
: 能的东西还没实现。
: 简单就是要懂得使用轮子,要组装个车你现做轮子,别人都开到目的地呢你还做轮子呢。

z****e
发帖数: 54598
164
你妈告诉你的?

【在 d****n 的大作中提到】
: 赵厕的手指头跟别人脚指头一样灵活
z****e
发帖数: 54598
165

古德霸给的那个不就是异步的?vert.x直接照搬node的代码就好了
甚至连promise都可以直接照搬
不过一般rxjava足够用了

【在 l**********n 的大作中提到】
: 就异步来说,nodejs的promise是最好的,.net也还行,scala也不错。java不是很方便
z****e
发帖数: 54598
166

话说这个程序主要bound主要在网络的io上
为啥老是关注cpu呢?

【在 N********n 的大作中提到】
:
: Node要写callback吧,用惯了async/await不想写CB了。听说JS也要引进async/await。

c*********e
发帖数: 16335
167
goodbug,下面这一行该写在哪呢?每一个url都要接收response,这个过程还是
synchronous的吧?
String bodyResponse = f.get();

你丫还不服,这才几行的东西,现抄个例子,异步,要写本地文件的话加两行,要
configure各种timeout再加几行。
Connection Pool,keep alive啥的人都已经做好了。我老人家说过多少次,轮子是第
一生产力,你们成天吵语言。有空像我老熟悉一堆轮子,不比你们懂一堆语言有用多了。
import com.ning.http.client.*;
AsyncHttpClient asyncHttpClient = new AsyncHttpClient();
for(String url : urls) {
asyncHttpClient.prepareGet(url).execute(new AsyncCompletionHandler
(){
@Override
public Response onCompleted(Response response) throws Exception{
System.out.println(response);
return response;
}
@Override
public void onThrowable(Throwable t){
// Something wrong happened.
}
});
}

【在 g*****g 的大作中提到】
: 你丫还不服,这才几行的东西,现抄个例子,异步,要写本地文件的话加两行,要
: configure各种timeout再加几行。
: Connection Pool,keep alive啥的人都已经做好了。我老人家说过多少次,轮子是第
: 一生产力,你们成天吵语言。有空像我老熟悉一堆轮子,不比你们懂一堆语言有用多了。
: import com.ning.http.client.*;
: AsyncHttpClient asyncHttpClient = new AsyncHttpClient();
: for(String url : urls) {
: asyncHttpClient.prepareGet(url).execute(new AsyncCompletionHandler
: (){
: @Override

d******e
发帖数: 2265
168
你要用future和当前线程当然需要block.
否则另外一个线程onComplete 处理写文件,存数据库。
不确信你可以在onComplete打印线程id.

了。

【在 c*********e 的大作中提到】
: goodbug,下面这一行该写在哪呢?每一个url都要接收response,这个过程还是
: synchronous的吧?
: String bodyResponse = f.get();
:
: 你丫还不服,这才几行的东西,现抄个例子,异步,要写本地文件的话加两行,要
: configure各种timeout再加几行。
: Connection Pool,keep alive啥的人都已经做好了。我老人家说过多少次,轮子是第
: 一生产力,你们成天吵语言。有空像我老熟悉一堆轮子,不比你们懂一堆语言有用多了。
: import com.ning.http.client.*;
: AsyncHttpClient asyncHttpClient = new AsyncHttpClient();

c*********e
发帖数: 16335
169
对,那就是说,这整个过程中,get http response是瓶颈,它只能是synchronous的。

【在 d******e 的大作中提到】
: 你要用future和当前线程当然需要block.
: 否则另外一个线程onComplete 处理写文件,存数据库。
: 不确信你可以在onComplete打印线程id.
:
: 了。

g*****g
发帖数: 34805
170
你缺乏基础,没法交流。去学习一下 epoll和 non blocking IO是什么意思吧。

【在 c*********e 的大作中提到】
: 对,那就是说,这整个过程中,get http response是瓶颈,它只能是synchronous的。
相关主题
写thread safe程序现在也是程序员必须要掌握的了吧真正对异步有需求的应该是游戏类服务器
同步编程真郁闷vertx里面同一个module多个verticle的疑问
大家难道全是半路出家?Java的服务器一般运行几个线程比较合适?
进入Programming版参与讨论
c*********e
发帖数: 16335
171
泄了。其实node.js的优势就是non blocking i/o.
所以可以用node.js做这个project.

【在 g*****g 的大作中提到】
: 你缺乏基础,没法交流。去学习一下 epoll和 non blocking IO是什么意思吧。
g*****g
发帖数: 34805
172
node.js做下载是可以的,跟Java性能相当。一开始parse XML就要被秒杀了。

【在 c*********e 的大作中提到】
: 泄了。其实node.js的优势就是non blocking i/o.
: 所以可以用node.js做这个project.

c*********e
发帖数: 16335
173
仔细看了一下linux里面epoll的源代码,其实它就是loop的时候不逐个去loop罢了,比
poll快,但是,它的epoll_wait, 据说在等待的时候会block,看下面这个链接。
http://stackoverflow.com/questions/7209057/does-poll-epoll-bloc
所以,epoll比poll快,但是它的epoll_wait貌似是synchronous的。
再来看看这个轮子:
https://github.com/AsyncHttpClient/async-http-client
java里面, Future.get() blocks and waits until promised result is available
(resolved). 所以,这个轮子里面的future.get()实际上会block当前thread.如果是用
的one thread, async 的话,就是把整个async所在的thread给block了
根据下面这个链接,https://docs.oracle.com/javaee/7/tutorial/servlets012.htm#
BEIGCFDF
java 的 Asynchronous processing 是把耗时的工作推给另外一个thread来处理。创建
一个新的thread和thread switch context的花销是巨大的。而node.js始终是用一个
thread来做所有的asyn.这个java 的 Asynchronous processing原理和node.js的
event loop完全不同:
There are two common scenarios in which a thread associated with a request
can be sitting idle.
The thread needs to wait for a resource to become available or process
data before building the response. For example, an application may need to
query a database or access data from a remote web service before generating
the response.
The thread needs to wait for an event before generating the response.
For example, an application may have to wait for a JMS message, new
information from another client, or new data available in a queue before
generating the response.
These scenarios represent blocking operations that limit the scalability of
web applications. Asynchronous processing refers to assigning these blocking
operations to a new thread and retuning the thread associated with the
request immediately to the container.
目前我所知的,真正的non blocking i/o的,只有node.js

【在 g*****g 的大作中提到】
: 你缺乏基础,没法交流。去学习一下 epoll和 non blocking IO是什么意思吧。
z****e
发帖数: 54598
174
写了这么多废话,直接去看一下vert.x不就得了
event loop什么vert.x里面都有,你有空打这么多废话不如认真去看看源代码
说了这么久,你压根连看都没看过,如果看过开篇就会告诉你node和vert.x的区别在哪
主要就是eventloop数量的差异
而且说的一堆里面jee和future什么整个凑一块乱说
古德霸那个轮子你压根就没有认真看源代码
想当然地以为用了future,你就知道future
都不知道说你什么好,概念乱成一锅粥了
Future这个接口是java.util.concurrent pkg里面的
常见的实现有SwingWorker这些,至少五六个实现
而真正的non blocking是java.nio
大部分java的异步轮子都是基于netty的,netty基于nio
所以这里没有Future什么事

available
htm#

【在 c*********e 的大作中提到】
: 仔细看了一下linux里面epoll的源代码,其实它就是loop的时候不逐个去loop罢了,比
: poll快,但是,它的epoll_wait, 据说在等待的时候会block,看下面这个链接。
: http://stackoverflow.com/questions/7209057/does-poll-epoll-bloc
: 所以,epoll比poll快,但是它的epoll_wait貌似是synchronous的。
: 再来看看这个轮子:
: https://github.com/AsyncHttpClient/async-http-client
: java里面, Future.get() blocks and waits until promised result is available
: (resolved). 所以,这个轮子里面的future.get()实际上会block当前thread.如果是用
: 的one thread, async 的话,就是把整个async所在的thread给block了
: 根据下面这个链接,https://docs.oracle.com/javaee/7/tutorial/servlets012.htm#

c*********e
发帖数: 16335
175
袋鼠国真的这么流行vert.x啊?
goodbug的那个轮子用的就是Future,自己去看:
https://github.com/AsyncHttpClient/async-http-client
swing早就过时了,现在是javaFX

代码

【在 z****e 的大作中提到】
: 写了这么多废话,直接去看一下vert.x不就得了
: event loop什么vert.x里面都有,你有空打这么多废话不如认真去看看源代码
: 说了这么久,你压根连看都没看过,如果看过开篇就会告诉你node和vert.x的区别在哪
: 主要就是eventloop数量的差异
: 而且说的一堆里面jee和future什么整个凑一块乱说
: 古德霸那个轮子你压根就没有认真看源代码
: 想当然地以为用了future,你就知道future
: 都不知道说你什么好,概念乱成一锅粥了
: Future这个接口是java.util.concurrent pkg里面的
: 常见的实现有SwingWorker这些,至少五六个实现

z****e
发帖数: 54598
176

你要多傻逼才会认为用了future?
java的aysnc绝大多数都是基于netty的
netty下面是nio
你说用了,给我找出来
那个轮子我早看过了
可不是你这种看了stackoverflow就出来说看过源代码的水平

【在 c*********e 的大作中提到】
: 袋鼠国真的这么流行vert.x啊?
: goodbug的那个轮子用的就是Future,自己去看:
: https://github.com/AsyncHttpClient/async-http-client
: swing早就过时了,现在是javaFX
:
: 代码

c*********e
发帖数: 16335
177
自己去找
import java.util.concurrent.Future;
future
下面这个是链接
https://github.com/AsyncHttpClient/async-http-client
群众的眼睛是雪亮的。

【在 z****e 的大作中提到】
:
: 你要多傻逼才会认为用了future?
: java的aysnc绝大多数都是基于netty的
: netty下面是nio
: 你说用了,给我找出来
: 那个轮子我早看过了
: 可不是你这种看了stackoverflow就出来说看过源代码的水平

z****e
发帖数: 54598
178
我明白你为什么说用了future了
那叫usage
拜托,你知道不知道实现和使用的差异
关于依赖,看pom就知道了,最后面赫然写着netty
http://github.com/AsyncHttpClient/async-http-client/blob/master
z****e
发帖数: 54598
179

那叫usage,人家只是用这个举个例子
实现跟使用两回事
Future本质上就是一个例子
就跟SwingWorker一样
你完全可以不用Future
你是不是不懂usage什么意思?

【在 c*********e 的大作中提到】
: 自己去找
: import java.util.concurrent.Future;
: future
: 下面这个是链接
: https://github.com/AsyncHttpClient/async-http-client
: 群众的眼睛是雪亮的。

c*********e
发帖数: 16335
180
写着netty就咋了,中华人民共和国还写着人民呢。

【在 z****e 的大作中提到】
: 我明白你为什么说用了future了
: 那叫usage
: 拜托,你知道不知道实现和使用的差异
: 关于依赖,看pom就知道了,最后面赫然写着netty
: http://github.com/AsyncHttpClient/async-http-client/blob/master

相关主题
An interview project: asynchronous socket programming看看大牛们为什么都远离.net
Obamacare website谁能说说同步/异步IO和阻塞/非阻塞IO的区别?
core java里有跟C++ std::async类似的东西吗?大牛们讨论一下异步编程吧
进入Programming版参与讨论
z****e
发帖数: 54598
181

说过了,future是接口
真正的实现,看nio
你是不是到现在还没弄明白类和接口的区别?

【在 c*********e 的大作中提到】
: 写着netty就咋了,中华人民共和国还写着人民呢。
c*********e
发帖数: 16335
182
拜托你用那个轮子写个不用future, 不block的例子。那个例子是写轮子的人写的,人
家很自豪地写出来给我们看,给我们copy的。
https://github.com/AsyncHttpClient/async-http-client

【在 z****e 的大作中提到】
:
: 说过了,future是接口
: 真正的实现,看nio
: 你是不是到现在还没弄明白类和接口的区别?

z****e
发帖数: 54598
183

哎哟,底层就是netty,你想写还会写不出来?
vert.x, undertow都用了netty,都不用future
你不会看?
不指望你能直接用netty,估计你也没那个水平
但是vert.x你总会看吧?我就不需要重复了吧?
用future做例子的表太多
顺便说一下,真正可能block的thread就一个spawn thread
其实没啥意义,一个thread实在是不值几个资源,又不是process

【在 c*********e 的大作中提到】
: 拜托你用那个轮子写个不用future, 不block的例子。那个例子是写轮子的人写的,人
: 家很自豪地写出来给我们看,给我们copy的。
: https://github.com/AsyncHttpClient/async-http-client

c*********e
发帖数: 16335
184
自己去看java的non blocking io怎么实现的:
https://docs.oracle.com/javaee/7/tutorial/servlets013.htm
Java EE provides nonblocking I/O support for servlets and filters when
processing requests in asynchronous mode. The following steps summarize how
to use nonblocking I/O to process requests and write responses inside
service methods.
Put the request in asynchronous mode as described in Asynchronous
Processing.
Obtain an input stream and/or an output stream from the request and
response objects in the service method.
Assign a read listener to the input stream and/or a write listener to
the output stream.
Process the request and the response inside the listener's callback
methods.
-----
注意点击那个Asynchronous Processing的链接
https://docs.oracle.com/javaee/7/tutorial/servlets012.htm#BEIGCFDF
There are two common scenarios in which a thread associated with a request
can be sitting idle.
The thread needs to wait for a resource to become available or process
data before building the response. For example, an application may need to
query a database or access data from a remote web service before generating
the response.
The thread needs to wait for an event before generating the response.
For example, an application may have to wait for a JMS message, new
information from another client, or new data available in a queue before
generating the response.
These scenarios represent blocking operations that limit the scalability of
web applications. Asynchronous processing refers to assigning these blocking
operations to a new thread and retuning the thread associated with the
request immediately to the container.
看到没有:
Asynchronous processing refers to assigning these blocking operations to a
new thread and retuning the thread associated with the request immediately
to the container.
java通过把时间长的事情推给另外一个thread来实现的non-blocking i/o.这个和node.
js的 event loop完全不同。

【在 z****e 的大作中提到】
:
: 哎哟,底层就是netty,你想写还会写不出来?
: vert.x, undertow都用了netty,都不用future
: 你不会看?
: 不指望你能直接用netty,估计你也没那个水平
: 但是vert.x你总会看吧?我就不需要重复了吧?
: 用future做例子的表太多
: 顺便说一下,真正可能block的thread就一个spawn thread
: 其实没啥意义,一个thread实在是不值几个资源,又不是process

z****e
发帖数: 54598
185

how
你看的是jee文档
你是不是又傻傻分不清楚jee和jse什么区别了?
jee其实就是一堆interfaces的集合
是一堆specification
我已经说了java.nio就是最底层的你要看的实现
是不是又不懂看了?

【在 c*********e 的大作中提到】
: 自己去看java的non blocking io怎么实现的:
: https://docs.oracle.com/javaee/7/tutorial/servlets013.htm
: Java EE provides nonblocking I/O support for servlets and filters when
: processing requests in asynchronous mode. The following steps summarize how
: to use nonblocking I/O to process requests and write responses inside
: service methods.
: Put the request in asynchronous mode as described in Asynchronous
: Processing.
: Obtain an input stream and/or an output stream from the request and
: response objects in the service method.

z****e
发帖数: 54598
186

how
“java通过把时间长的事情推给另外一个thread来实现的non-blocking i/o.这个和
node.
js的 event loop完全不同。”
我的天,这个所谓另外一个thread在node和vert.x里面就是worker
没啥本质上不同
顺便说一下,你好像是北美国的嘛
哪个学校的?我好希望你是多大的

【在 c*********e 的大作中提到】
: 自己去看java的non blocking io怎么实现的:
: https://docs.oracle.com/javaee/7/tutorial/servlets013.htm
: Java EE provides nonblocking I/O support for servlets and filters when
: processing requests in asynchronous mode. The following steps summarize how
: to use nonblocking I/O to process requests and write responses inside
: service methods.
: Put the request in asynchronous mode as described in Asynchronous
: Processing.
: Obtain an input stream and/or an output stream from the request and
: response objects in the service method.

c*********e
发帖数: 16335
187
拜托,lz要处理50万个xml文件噢。你准备用多少个thread来处理这50万个文件?每
个thread都要再create另外一个thread来实现java所谓的non blocking i/o.

【在 z****e 的大作中提到】
:
: how
: “java通过把时间长的事情推给另外一个thread来实现的non-blocking i/o.这个和
: node.
: js的 event loop完全不同。”
: 我的天,这个所谓另外一个thread在node和vert.x里面就是worker
: 没啥本质上不同
: 顺便说一下,你好像是北美国的嘛
: 哪个学校的?我好希望你是多大的

z****e
发帖数: 54598
188
一般spawn thread就做成eventloop
古德霸那个轮子里面,如果不返回future的话
就跟eventloop很像了
z****e
发帖数: 54598
189

插,所以说了用thread pool
你怎么就不懂从worker这种架构中学到点东西呢?

【在 c*********e 的大作中提到】
: 拜托,lz要处理50万个xml文件噢。你准备用多少个thread来处理这50万个文件?每
: 个thread都要再create另外一个thread来实现java所谓的non blocking i/o.

c*********e
发帖数: 16335
190
不返回future的话,你咋知道成功了还是失败了?

【在 z****e 的大作中提到】
: 一般spawn thread就做成eventloop
: 古德霸那个轮子里面,如果不返回future的话
: 就跟eventloop很像了

相关主题
看了一下C#的async await看了一下Meteor很不错
parallel programming的复杂性分层/流行工具技术名词说了半天异步是大势所趋没什么疑问了
goodbug基本不会编程,就会吹牛逼说同步比异步快的根本不懂网站
进入Programming版参与讨论
z****e
发帖数: 54598
191

你不是有callback嘛?
例子里面赫然写着一个oncompletion

【在 c*********e 的大作中提到】
: 不返回future的话,你咋知道成功了还是失败了?
c*********e
发帖数: 16335
192
java的non-blocking i/o,实际上是multi-threading和async的混合体。
node.js的non blocking i/o,是one thread,async的很纯洁的实现。

【在 z****e 的大作中提到】
:
: 你不是有callback嘛?
: 例子里面赫然写着一个oncompletion

c*********e
发帖数: 16335
193
拜托,用get()才能真正激发那个Future来实现。那个oncompletion()只是
一个定义而已。

【在 z****e 的大作中提到】
:
: 你不是有callback嘛?
: 例子里面赫然写着一个oncompletion

z****e
发帖数: 54598
194

fuck,到底做成什么样还不是你自己搞的?
1个thread能做的,multiple thread做不了?
一个event loop就能跑,多个event loop反而不行了?
这不是搞笑嘛,纯洁你妹啊
古德霸做的那种就是经典架构
vert.x, node.js, undertow什么都是类似的结构
如果深入下去的话,几乎所有的都是一样的结构
包括go之类的server,都会做成这样
主要是嫌麻烦,所以懒得做成这样,嫌麻烦,p大点事搞来搞去
不是说这样有什么问题,干活时候一般都会搞成这样

【在 c*********e 的大作中提到】
: java的non-blocking i/o,实际上是multi-threading和async的混合体。
: node.js的non blocking i/o,是one thread,async的很纯洁的实现。

z****e
发帖数: 54598
195

放屁,那个就是一个实现类,人家写出来意思到了就不写了而已
我插,你连文档都看不懂了
你北美国哪个学校混的?
强烈要求你去多大

【在 c*********e 的大作中提到】
: 拜托,用get()才能真正激发那个Future来实现。那个oncompletion()只是
: 一个定义而已。

l**********n
发帖数: 8443
196
undertow是基于netty的吗?

【在 z****e 的大作中提到】
:
: 放屁,那个就是一个实现类,人家写出来意思到了就不写了而已
: 我插,你连文档都看不懂了
: 你北美国哪个学校混的?
: 强烈要求你去多大

c*********e
发帖数: 16335
197
@Override
public Integer onCompleted(Response response) throws Exception{
// Do something with the Response
return response.getStatusCode();
}
int statusCode = f.get();
大哥,你还没看懂吗?onCompleted()返回的就是statusCode,是一个integer.

【在 z****e 的大作中提到】
:
: 放屁,那个就是一个实现类,人家写出来意思到了就不写了而已
: 我插,你连文档都看不懂了
: 你北美国哪个学校混的?
: 强烈要求你去多大

c*********e
发帖数: 16335
198
node.js因为是javascript的缘故,所以只有一个thread,人家因此用了async,所以做出
来的non blocking i/o,始终用的一个thread.可能这就是塞翁失马,安知非福吧。
反观java,因为node.js出来了个non blocking i/o,自己也学着做了个,不过是multi-
threading和async的混合体。

【在 z****e 的大作中提到】
:
: 放屁,那个就是一个实现类,人家写出来意思到了就不写了而已
: 我插,你连文档都看不懂了
: 你北美国哪个学校混的?
: 强烈要求你去多大

g*****g
发帖数: 34805
199
返回Future不是blocking的,调用Future.get才是Blocking的,你自己钻进牛角尖了。
那个onCompleted一般是这么写的。
onComplete(Response response) {
parserExecutorService.submit(new Task(response));
return response;
}
把异步返回的payload扔进parse的threadpool就完了,整个过程都是non-blocking的,
瓶颈纯粹取决于下载速度。实现上就是epoll发现完成了,trigger一个event产生一个
job扔进Async httpclient内建的threadpool,因为这个job没IO也不blocking会立刻完
成。到这里跟Node.js都是相似的。
parserExecutorService是另一个threadpool 同步处理支持多线程,在这里Java秒杀
了Node.
如果Future不能异步只能阻塞等,那还要Future干什么?get()是一个异步变同步的办
法而已。

【在 c*********e 的大作中提到】
: 袋鼠国真的这么流行vert.x啊?
: goodbug的那个轮子用的就是Future,自己去看:
: https://github.com/AsyncHttpClient/async-http-client
: swing早就过时了,现在是javaFX
:
: 代码

g*****g
发帖数: 34805
200
Java做non-blocking IO的时候,Node这东西还不存在。Java NIO出现于1.4 2002年,
你不懂就不要瞎说。

【在 c*********e 的大作中提到】
: node.js因为是javascript的缘故,所以只有一个thread,人家因此用了async,所以做出
: 来的non blocking i/o,始终用的一个thread.可能这就是塞翁失马,安知非福吧。
: 反观java,因为node.js出来了个non blocking i/o,自己也学着做了个,不过是multi-
: threading和async的混合体。

相关主题
asynchronous vs non-blocking大家难道全是半路出家?
写thread safe程序现在也是程序员必须要掌握的了吧真正对异步有需求的应该是游戏类服务器
同步编程真郁闷vertx里面同一个module多个verticle的疑问
进入Programming版参与讨论
k****i
发帖数: 101
201
- non-blocking(async) i/o 底层先要支持,如epoll等
- 应用层有多种实现,node用single threaded eventloop,go用goroutine,c#有
async/await,java有threadpool如某些async client libs,也有eventloop如vertx,
这些都能解决io-bound request/connection:thread=1:1的问题。

【在 c*********e 的大作中提到】
: node.js因为是javascript的缘故,所以只有一个thread,人家因此用了async,所以做出
: 来的non blocking i/o,始终用的一个thread.可能这就是塞翁失马,安知非福吧。
: 反观java,因为node.js出来了个non blocking i/o,自己也学着做了个,不过是multi-
: threading和async的混合体。

c*********e
发帖数: 16335
202
你用这个轮子做lz的60万个xml下载,会调用Future.get吗?

【在 g*****g 的大作中提到】
: 返回Future不是blocking的,调用Future.get才是Blocking的,你自己钻进牛角尖了。
: 那个onCompleted一般是这么写的。
: onComplete(Response response) {
: parserExecutorService.submit(new Task(response));
: return response;
: }
: 把异步返回的payload扔进parse的threadpool就完了,整个过程都是non-blocking的,
: 瓶颈纯粹取决于下载速度。实现上就是epoll发现完成了,trigger一个event产生一个
: job扔进Async httpclient内建的threadpool,因为这个job没IO也不blocking会立刻完
: 成。到这里跟Node.js都是相似的。

c*********e
发帖数: 16335
203
请问,java.nio.ByteBuffer是哪个java版本出来的?
https://github.com/AsyncHttpClient/async-http-client/blob/master/api/src/
main/java/org/asynchttpclient/Response.java
http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.ht

【在 g*****g 的大作中提到】
: Java做non-blocking IO的时候,Node这东西还不存在。Java NIO出现于1.4 2002年,
: 你不懂就不要瞎说。

c*********e
发帖数: 16335
204
最后一句话亮了:
get()是一个异步变同步的办法而已。

【在 g*****g 的大作中提到】
: 返回Future不是blocking的,调用Future.get才是Blocking的,你自己钻进牛角尖了。
: 那个onCompleted一般是这么写的。
: onComplete(Response response) {
: parserExecutorService.submit(new Task(response));
: return response;
: }
: 把异步返回的payload扔进parse的threadpool就完了,整个过程都是non-blocking的,
: 瓶颈纯粹取决于下载速度。实现上就是epoll发现完成了,trigger一个event产生一个
: job扔进Async httpclient内建的threadpool,因为这个job没IO也不blocking会立刻完
: 成。到这里跟Node.js都是相似的。

c*********e
发帖数: 16335
205
下面这个连接里面已经说得很清楚了,poll/epoll block:
http://stackoverflow.com/questions/7209057/does-poll-epoll-bloc
node.js用的一个thread, async来实现的。java用的多个thread,async来实现的。这是
我的point.

【在 k****i 的大作中提到】
: - non-blocking(async) i/o 底层先要支持,如epoll等
: - 应用层有多种实现,node用single threaded eventloop,go用goroutine,c#有
: async/await,java有threadpool如某些async client libs,也有eventloop如vertx,
: 这些都能解决io-bound request/connection:thread=1:1的问题。

g*****g
发帖数: 34805
206
I服了U,你没看到文档里写着Since 1.4吗?

【在 c*********e 的大作中提到】
: 请问,java.nio.ByteBuffer是哪个java版本出来的?
: https://github.com/AsyncHttpClient/async-http-client/blob/master/api/src/
: main/java/org/asynchttpclient/Response.java
: http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.ht

g*****g
发帖数: 34805
207
是呀,没人叫你调用Future.get()。不调就是异步的。完成了在另一个线程里返回,这
中间IO的时候并没有占用thread。

【在 c*********e 的大作中提到】
: 最后一句话亮了:
: get()是一个异步变同步的办法而已。

c*********e
发帖数: 16335
208
java.nio.ByteBuffer是在java 7里才有的。

【在 g*****g 的大作中提到】
: I服了U,你没看到文档里写着Since 1.4吗?
c*********e
发帖数: 16335
209
您不调用,咋知道response是啥啊?如果response是404,500呢?

【在 g*****g 的大作中提到】
: 是呀,没人叫你调用Future.get()。不调就是异步的。完成了在另一个线程里返回,这
: 中间IO的时候并没有占用thread。

g*****g
发帖数: 34805
210
http://www.developer.com/java/other/article.php/1449271/The-Byt
你看看这文章是那年的吧?我实在没法跟你沟通。

【在 c*********e 的大作中提到】
: java.nio.ByteBuffer是在java 7里才有的。
相关主题
vertx里面同一个module多个verticle的疑问Obamacare website
Java的服务器一般运行几个线程比较合适?core java里有跟C++ std::async类似的东西吗?
An interview project: asynchronous socket programming看看大牛们为什么都远离.net
进入Programming版参与讨论
g*****g
发帖数: 34805
211
I服了U,IO结束了查Response跟block在那里等IO结束是一回事?Node.js一样要查
response。区别是Node在主进程里查,Java在一堆线程里面并发查。这个是个很快的操
作,对Node不会有什么影响。如果这个操作很慢,对Node会影响很大,对Java仍然影响
很小。到了parse部分,Java秒杀Node就是这个原因。

【在 c*********e 的大作中提到】
: 您不调用,咋知道response是啥啊?如果response是404,500呢?
c*********e
发帖数: 16335
212
node.js是通过callback的。java和node.js完全不是一回事。

【在 g*****g 的大作中提到】
: I服了U,IO结束了查Response跟block在那里等IO结束是一回事?Node.js一样要查
: response。区别是Node在主进程里查,Java在一堆线程里面并发查。这个是个很快的操
: 作,对Node不会有什么影响。如果这个操作很慢,对Node会影响很大,对Java仍然影响
: 很小。到了parse部分,Java秒杀Node就是这个原因。

c*********e
发帖数: 16335
213
噢,看错了。其实我是想说,java.nio.file是在java 7里才有的。
这个轮子里import java.nio.file了。

【在 g*****g 的大作中提到】
: http://www.developer.com/java/other/article.php/1449271/The-Byt
: 你看看这文章是那年的吧?我实在没法跟你沟通。

g*****g
发帖数: 34805
214
那个onComplete就是个callback。所谓异步IO,不就是IO的时候不占用CPU资源,其余
的所有事情还是得CPU来做。Node能做到的,Java当然也能做到。

【在 c*********e 的大作中提到】
: node.js是通过callback的。java和node.js完全不是一回事。
c*********e
发帖数: 16335
215
Future 的结果只能用get()来得到:
http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/F
A Future represents the result of an asynchronous computation. Methods are
provided to check if the computation is complete, to wait for its completion
, and to retrieve the result of the computation. The result can only be
retrieved using method get when the computation has completed, blocking if
necessary until it is ready.

【在 g*****g 的大作中提到】
: 那个onComplete就是个callback。所谓异步IO,不就是IO的时候不占用CPU资源,其余
: 的所有事情还是得CPU来做。Node能做到的,Java当然也能做到。

k****i
发帖数: 101
216
用thread(pool)是:io-event-handler:thread=1:1
而eventloop可以: io-event-callbacks:thread=any:1

【在 g*****g 的大作中提到】
: 那个onComplete就是个callback。所谓异步IO,不就是IO的时候不占用CPU资源,其余
: 的所有事情还是得CPU来做。Node能做到的,Java当然也能做到。

d******e
发帖数: 2265
217
你没搞清楚的事future不一定要那结果。
你可以在success path里面➕一个call back。
劝你学习一下scala或者es6.
里面的async在语言层面的支持非常强大。然后你会发现概念会清楚的多。
再不会被这些搞java绕晕了。

completion

【在 c*********e 的大作中提到】
: Future 的结果只能用get()来得到:
: http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/F
: A Future represents the result of an asynchronous computation. Methods are
: provided to check if the computation is complete, to wait for its completion
: , and to retrieve the result of the computation. The result can only be
: retrieved using method get when the computation has completed, blocking if
: necessary until it is ready.

c*********e
发帖数: 16335
218
谢谢。
future可以不要那个结果。我说的是,如果结果是404,500的话,我们要不要采取什么
措施呢?

【在 d******e 的大作中提到】
: 你没搞清楚的事future不一定要那结果。
: 你可以在success path里面➕一个call back。
: 劝你学习一下scala或者es6.
: 里面的async在语言层面的支持非常强大。然后你会发现概念会清楚的多。
: 再不会被这些搞java绕晕了。
:
: completion

d******e
发帖数: 2265
219
val f: Future[List[String]] = Future {
session.getRecentPosts
}
f onFailure {
case t => println("An error has occured: " + t.getMessage)
}
f onSuccess {
case posts => for (post <- posts) println(post)
}
比如404.你在onFailure里面处理好了。你不需要在主线程里面f.get活着await来处理。

【在 c*********e 的大作中提到】
: 谢谢。
: future可以不要那个结果。我说的是,如果结果是404,500的话,我们要不要采取什么
: 措施呢?

c*********e
发帖数: 16335
220
en,goodbug是对的。看了一下他的代码,不需要用什么future,这样就是accomplish
asynchronous (non-blocking) operation without using a Future if you want to
receive and process the response in your handler。
发信人: goodbug (好虫), 信区: Programming
标 题: Re: 如何快速处理大量网上xml文件?
发信站: BBS 未名空间站 (Tue Aug 25 14:45:04 2015, 美东)
你丫还不服,这才几行的东西,现抄个例子,异步,要写本地文件的话加两行,要
configure各种timeout再加几行。
Connection Pool,keep alive啥的人都已经做好了。我老人家说过多少次,轮子是第
一生产力,你们成天吵语言。有空像我老熟悉一堆轮子,不比你们懂一堆语言有用多了。
import com.ning.http.client.*;
AsyncHttpClient asyncHttpClient = new AsyncHttpClient();
for(String url : urls) {
asyncHttpClient.prepareGet(url).execute(new AsyncCompletionHandler
(){
@Override
public Response onCompleted(Response response) throws Exception{
System.out.println(response);
return response;
}
@Override
public void onThrowable(Throwable t){
// Something wrong happened.
}
});
}

【在 d******e 的大作中提到】
: 你没搞清楚的事future不一定要那结果。
: 你可以在success path里面➕一个call back。
: 劝你学习一下scala或者es6.
: 里面的async在语言层面的支持非常强大。然后你会发现概念会清楚的多。
: 再不会被这些搞java绕晕了。
:
: completion

相关主题
谁能说说同步/异步IO和阻塞/非阻塞IO的区别?parallel programming的复杂性分层/流行工具技术名词
大牛们讨论一下异步编程吧goodbug基本不会编程,就会吹牛逼
看了一下C#的async await看了一下Meteor很不错
进入Programming版参与讨论
w**z
发帖数: 8232
221
你是我见过的态度最好的小朋友。

to
了。

【在 c*********e 的大作中提到】
: en,goodbug是对的。看了一下他的代码,不需要用什么future,这样就是accomplish
: asynchronous (non-blocking) operation without using a Future if you want to
: receive and process the response in your handler。
: 发信人: goodbug (好虫), 信区: Programming
: 标 题: Re: 如何快速处理大量网上xml文件?
: 发信站: BBS 未名空间站 (Tue Aug 25 14:45:04 2015, 美东)
: 你丫还不服,这才几行的东西,现抄个例子,异步,要写本地文件的话加两行,要
: configure各种timeout再加几行。
: Connection Pool,keep alive啥的人都已经做好了。我老人家说过多少次,轮子是第
: 一生产力,你们成天吵语言。有空像我老熟悉一堆轮子,不比你们懂一堆语言有用多了。

z****e
发帖数: 54598
222
写java多久了?
这么久还不会看javadoc?
不懂看里面到底有什么方法?

【在 c*********e 的大作中提到】
: en,goodbug是对的。看了一下他的代码,不需要用什么future,这样就是accomplish
: asynchronous (non-blocking) operation without using a Future if you want to
: receive and process the response in your handler。
: 发信人: goodbug (好虫), 信区: Programming
: 标 题: Re: 如何快速处理大量网上xml文件?
: 发信站: BBS 未名空间站 (Tue Aug 25 14:45:04 2015, 美东)
: 你丫还不服,这才几行的东西,现抄个例子,异步,要写本地文件的话加两行,要
: configure各种timeout再加几行。
: Connection Pool,keep alive啥的人都已经做好了。我老人家说过多少次,轮子是第
: 一生产力,你们成天吵语言。有空像我老熟悉一堆轮子,不比你们懂一堆语言有用多了。

z****e
发帖数: 54598
223

应该都是
java现在只要是async的下面都是netty&nio

【在 l**********n 的大作中提到】
: undertow是基于netty的吗?
z****e
发帖数: 54598
224

是event loops & thread pools的混合体
multiple threading是一个概念性名词
不是指具体的实现,是说可以这么做
我强烈要求你是多大的

【在 c*********e 的大作中提到】
: node.js因为是javascript的缘故,所以只有一个thread,人家因此用了async,所以做出
: 来的non blocking i/o,始终用的一个thread.可能这就是塞翁失马,安知非福吧。
: 反观java,因为node.js出来了个non blocking i/o,自己也学着做了个,不过是multi-
: threading和async的混合体。

z****e
发帖数: 54598
225

java哪有那么难,vert.x写得异常清晰
被她乱搞,死活要回到future上去,让人吐血
她就是要证明,java的async,除了future,其他都不可行
进入这个死胡同之后,就走不出来了
早就说了,future可以不用,直接上cb就是了
cb会造成金字塔,所以这个时候要上reactive,比如rxjava

【在 d******e 的大作中提到】
: 你没搞清楚的事future不一定要那结果。
: 你可以在success path里面➕一个call back。
: 劝你学习一下scala或者es6.
: 里面的async在语言层面的支持非常强大。然后你会发现概念会清楚的多。
: 再不会被这些搞java绕晕了。
:
: completion

c*********e
发帖数: 16335
226
我发贴,本着学习的态度,对事不对人。

【在 w**z 的大作中提到】
: 你是我见过的态度最好的小朋友。
:
: to
: 了。

g*****g
发帖数: 34805
227
Java的东西,我老人家,基本不可能错,像这么基本的东西,你多去google读代码就对
了。

【在 c*********e 的大作中提到】
: 我发贴,本着学习的态度,对事不对人。
z****e
发帖数: 54598
228

你根本没有去学习
这些东西从你最早开始问多线程时候别人就在告诉你
不停滴重复,你一点都没学进去
估计看的人都看懂了

【在 c*********e 的大作中提到】
: 我发贴,本着学习的态度,对事不对人。
l**********n
发帖数: 8443
229
vert.x源码好读吗?

【在 z****e 的大作中提到】
:
: 你根本没有去学习
: 这些东西从你最早开始问多线程时候别人就在告诉你
: 不停滴重复,你一点都没学进去
: 估计看的人都看懂了

N********n
发帖数: 8363
230

你加几行"printf(thread_id)"看调用前和返回后是不是同个THREAD不就清楚了。

【在 c*********e 的大作中提到】
: 拜托你用那个轮子写个不用future, 不block的例子。那个例子是写轮子的人写的,人
: 家很自豪地写出来给我们看,给我们copy的。
: https://github.com/AsyncHttpClient/async-http-client

1 (共1页)
进入Programming版参与讨论
相关主题
goodbug基本不会编程,就会吹牛逼真正对异步有需求的应该是游戏类服务器
看了一下Meteor很不错vertx里面同一个module多个verticle的疑问
说了半天异步是大势所趋没什么疑问了Java的服务器一般运行几个线程比较合适?
说同步比异步快的根本不懂网站An interview project: asynchronous socket programming
asynchronous vs non-blockingObamacare website
写thread safe程序现在也是程序员必须要掌握的了吧core java里有跟C++ std::async类似的东西吗?
同步编程真郁闷看看大牛们为什么都远离.net
大家难道全是半路出家?谁能说说同步/异步IO和阻塞/非阻塞IO的区别?
相关话题的讨论汇总
话题: thread话题: response话题: java话题: 异步话题: blocking