由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - node现在还行么?用的地放多不多?
相关主题
多线程,异步,并发冲突,fp和其它one more c++ question
难得好文,Linkedin如何用Node beat Python,Ruby,Javanode.js的unavailable
弱问下,UBER后台用的是啥?狗狗抛弃Java转投swift?
请教一个 F的message设计问题, 不能理解机械硬盘的物理极限
Node 完胜 Ruby呀傻逼太监懂个屁C*
又看了一下go 感觉Java毫无压力有专门讲 message server performance 的资料吗
scala并发redis, kafka
vert.x 3预计月底发布beta1版本Celery in Golang and Scala?
相关话题的讨论汇总
话题: dispatch话题: node话题: async话题: log话题: queue
进入Programming版参与讨论
1 (共1页)
t**r
发帖数: 3428
1
node现在还行么?用的地放多不多?
c*********e
发帖数: 16335
2
还行,确实很快。用于real-time, chat room.现在websocket还没普及,所以socket.
io还是有市场的。

【在 t**r 的大作中提到】
: node现在还行么?用的地放多不多?
c******l
发帖数: 3972
3
grunt,npm, bower,都很好用啊
n****j
发帖数: 1708
4
尤其跟 mongo、angular 之类搭配,page render 放到前端,全都是 js 的东西,一根
肠子通到底,太爽了

【在 c*********e 的大作中提到】
: 还行,确实很快。用于real-time, chat room.现在websocket还没普及,所以socket.
: io还是有市场的。

k**n
发帖数: 3989
5
你说们这些与node 不搭界呀...
node + express 是替代 iis,.net, apache ,java, php , 等server side的东东.
node.js的作用就是让你能用js 来写原来java,php,c#能写的服务瑞代码.

【在 c*********e 的大作中提到】
: 还行,确实很快。用于real-time, chat room.现在websocket还没普及,所以socket.
: io还是有市场的。

c*********e
发帖数: 16335
6
最近在比较node.js和java concurrency,发现java concurrency对各种thread
interrupt, cancel之类的处理非常的精细,所以里面出了问题,可以写在一个log表里
面,日后检查出了什么问题,非常方便。

【在 n****j 的大作中提到】
: 尤其跟 mongo、angular 之类搭配,page render 放到前端,全都是 js 的东西,一根
: 肠子通到底,太爽了

p*****2
发帖数: 21240
7
how about go?

【在 c*********e 的大作中提到】
: 最近在比较node.js和java concurrency,发现java concurrency对各种thread
: interrupt, cancel之类的处理非常的精细,所以里面出了问题,可以写在一个log表里
: 面,日后检查出了什么问题,非常方便。

l**********n
发帖数: 8443
8
单线程怎么和多线程比?你的思维真有趣。你肯定属于高智商人群。

【在 c*********e 的大作中提到】
: 最近在比较node.js和java concurrency,发现java concurrency对各种thread
: interrupt, cancel之类的处理非常的精细,所以里面出了问题,可以写在一个log表里
: 面,日后检查出了什么问题,非常方便。

d******e
发帖数: 2265
9
node就是单线程的。所以你根本不用担心这些 interrupt, cancelde问题。
所以,java的精细到底是优点能还是缺点呢?

【在 c*********e 的大作中提到】
: 最近在比较node.js和java concurrency,发现java concurrency对各种thread
: interrupt, cancel之类的处理非常的精细,所以里面出了问题,可以写在一个log表里
: 面,日后检查出了什么问题,非常方便。

l**********n
发帖数: 8443
10
有scala

【在 d******e 的大作中提到】
: node就是单线程的。所以你根本不用担心这些 interrupt, cancelde问题。
: 所以,java的精细到底是优点能还是缺点呢?

相关主题
又看了一下go 感觉Java毫无压力one more c++ question
scala并发node.js的unavailable
vert.x 3预计月底发布beta1版本狗狗抛弃Java转投swift?
进入Programming版参与讨论
z*******3
发帖数: 13709
11
scala的thread也很蛋疼
上vert.x

【在 l**********n 的大作中提到】
: 有scala
l**********n
发帖数: 8443
12
actor

【在 z*******3 的大作中提到】
: scala的thread也很蛋疼
: 上vert.x

c*********e
发帖数: 16335
13
客户让你干一project,要求运行快,而且要求出错了要有出错信息,好fix issue.
这时你选node.js还是java concurrency呢?

【在 l**********n 的大作中提到】
: 单线程怎么和多线程比?你的思维真有趣。你肯定属于高智商人群。
l**********n
发帖数: 8443
14
node promise是 monad

【在 c*********e 的大作中提到】
: 客户让你干一project,要求运行快,而且要求出错了要有出错信息,好fix issue.
: 这时你选node.js还是java concurrency呢?

c*********e
发帖数: 16335
15
node.js有类似java的shutdownnow()的方法吗?立刻停止所有的线程。

【在 l**********n 的大作中提到】
: node promise是 monad
d******e
发帖数: 2265
16
这个都是看log了,然后到log server 上去查吧。
就是你用python也又要有log 啊。
和语言美什么关系。

【在 c*********e 的大作中提到】
: 客户让你干一project,要求运行快,而且要求出错了要有出错信息,好fix issue.
: 这时你选node.js还是java concurrency呢?

c*********e
发帖数: 16335
17
log也有大讲究,java里面,多线程的时候,把log text写入一个blockingqueue,让
consumer来把log写入数据库之类的地方。这是producer-consumer模式。
如果把logging放在node.js的async.each()里面,那会让程序变慢。写log其实是一个
很花时间的过程,尤其是有1百万个log text同时要写入数据库。

【在 d******e 的大作中提到】
: 这个都是看log了,然后到log server 上去查吧。
: 就是你用python也又要有log 啊。
: 和语言美什么关系。

z*******3
发帖数: 13709
18
vert.x就是actor
只不过文档不会像akka那样,到处都是含混晦涩的概念
immutable,state,actor满天飞
vert.x的文档几乎没出现过这些概念,虽然用的是同样的model

【在 l**********n 的大作中提到】
: actor
z*******3
发帖数: 13709
19

你用的log方式落伍了,直接上cassandra,把log丢到c*里面去
虽然涉及了io,但是会好很多,多数nosql最初的例子都是用来存log
log4j什么都太慢了,如果要用async,上worker
所有log通过bus发送给worker,然后由worker写入c*或者hdfs
反正log都是immutable,通过bus传输无压力
也可以通过shared object来发送

【在 c*********e 的大作中提到】
: log也有大讲究,java里面,多线程的时候,把log text写入一个blockingqueue,让
: consumer来把log写入数据库之类的地方。这是producer-consumer模式。
: 如果把logging放在node.js的async.each()里面,那会让程序变慢。写log其实是一个
: 很花时间的过程,尤其是有1百万个log text同时要写入数据库。

t**r
发帖数: 3428
20
log最好还是写到kafka里。
写到卡三里有点脱裤子放屁的感觉
相关主题
机械硬盘的物理极限redis, kafka
傻逼太监懂个屁C*Celery in Golang and Scala?
有专门讲 message server performance 的资料吗Pinterest陶涛:三个教训和三个发展选择
进入Programming版参与讨论
z*******3
发帖数: 13709
21

c*经常用,kafka可未必常用
写到c*里一个考虑就是已经用了一个nosql
就不用再加东西进去了
log单独用一个框架才有一种脱裤子放屁的多余

【在 t**r 的大作中提到】
: log最好还是写到kafka里。
: 写到卡三里有点脱裤子放屁的感觉

p*****2
发帖数: 21240
22
我感觉jvm上做concurrency都很麻烦

【在 l**********n 的大作中提到】
: actor
p*****2
发帖数: 21240
23
kafka一般是多个consumer才用吧?

【在 z*******3 的大作中提到】
:
: c*经常用,kafka可未必常用
: 写到c*里一个考虑就是已经用了一个nosql
: 就不用再加东西进去了
: log单独用一个框架才有一种脱裤子放屁的多余

c*********e
发帖数: 16335
24
问题是,不是所有的project都是用的nosql啊。现在大部分公司还是用的传统的rdbs.
很多startup用的mysql之类的免费的数据库。
写log,通常是写入log file,或者数据库。

【在 z*******3 的大作中提到】
:
: c*经常用,kafka可未必常用
: 写到c*里一个考虑就是已经用了一个nosql
: 就不用再加东西进去了
: log单独用一个框架才有一种脱裤子放屁的多余

c*********e
发帖数: 16335
25
node.js有类似java的shutdownnow()的方法吗?立刻停止所有的线程。
感觉node.js对突发accident,exception的处理没有java concurrency那么全面细致。
所以,如果网站做出来放到live上去了,突然有一天出事了,都不知道什么原因。这个
是非常头疼的事情。

【在 z*******3 的大作中提到】
:
: c*经常用,kafka可未必常用
: 写到c*里一个考虑就是已经用了一个nosql
: 就不用再加东西进去了
: log单独用一个框架才有一种脱裤子放屁的多余

p*****2
发帖数: 21240
26
不知道你在说什么
你有学过node吗

【在 c*********e 的大作中提到】
: node.js有类似java的shutdownnow()的方法吗?立刻停止所有的线程。
: 感觉node.js对突发accident,exception的处理没有java concurrency那么全面细致。
: 所以,如果网站做出来放到live上去了,突然有一天出事了,都不知道什么原因。这个
: 是非常头疼的事情。

c*********e
发帖数: 16335
27
我已经给公司写了一个node.js程序,正成功运行。貌似node.js的async确实快,但是
对突发事件和危机的处理不象java那么全面周到。毕竟,java出来有些年头了,现在版
本到8了。

【在 p*****2 的大作中提到】
: 不知道你在说什么
: 你有学过node吗

p*****2
发帖数: 21240
28
node只是脚本 功能性肯定没java全面
可是java做concurrency也很麻烦
node的异常 错误处理方式跟java很不一样 跟go到类似
你说说你想处理什么情况呀 不要说什么thread node本来就是single thread的 说说你
想做什么就可以了

【在 c*********e 的大作中提到】
: 我已经给公司写了一个node.js程序,正成功运行。貌似node.js的async确实快,但是
: 对突发事件和危机的处理不象java那么全面周到。毕竟,java出来有些年头了,现在版
: 本到8了。

c*********e
发帖数: 16335
29
比如说,要写一个发email的project,要求快,而且要realtime显示发了多少email (a)
,实际送
出去多少(b),有多少被drop掉(c),而且这3个real time数字要加起来有a= b + c.

【在 p*****2 的大作中提到】
: node只是脚本 功能性肯定没java全面
: 可是java做concurrency也很麻烦
: node的异常 错误处理方式跟java很不一样 跟go到类似
: 你说说你想处理什么情况呀 不要说什么thread node本来就是single thread的 说说你
: 想做什么就可以了

d******e
发帖数: 2265
30
这个一般都丢后台,用celery, actor什么的搞了。前面node直接返回了。
你这个real time 设计很有难度啊。

【在 c*********e 的大作中提到】
: 比如说,要写一个发email的project,要求快,而且要realtime显示发了多少email (a)
: ,实际送
: 出去多少(b),有多少被drop掉(c),而且这3个real time数字要加起来有a= b + c.

相关主题
Spark会干掉Storm吗?难得好文,Linkedin如何用Node beat Python,Ruby,Java
祝贺peking2升级成Staff & Tech Lead (转载)弱问下,UBER后台用的是啥?
多线程,异步,并发冲突,fp和其它请教一个 F的message设计问题, 不能理解
进入Programming版参与讨论
p*****2
发帖数: 21240
31
用redis不行吗

【在 d******e 的大作中提到】
: 这个一般都丢后台,用celery, actor什么的搞了。前面node直接返回了。
: 你这个real time 设计很有难度啊。

l**********n
发帖数: 8443
32
node是单线程,所以和java自然不同,异常分可处理的,和不可处理的。node应该写成
fp, 和scala类似。写成oop是不行的。

【在 c*********e 的大作中提到】
: node.js有类似java的shutdownnow()的方法吗?立刻停止所有的线程。
: 感觉node.js对突发accident,exception的处理没有java concurrency那么全面细致。
: 所以,如果网站做出来放到live上去了,突然有一天出事了,都不知道什么原因。这个
: 是非常头疼的事情。

d******e
发帖数: 2265
33
没研究。celery, actor是 task battery pool. redis还是充当消息queue吧。

【在 p*****2 的大作中提到】
: 用redis不行吗
c*********e
发帖数: 16335
34
对呀。市面上有的email发送服务,就做不到realtime 的 a = b + c. 其实也可以来个
cheat,先把b,c算出来,然后b+c的值赋给a.不过这个对我们程序员来说就没什么价值了。

【在 d******e 的大作中提到】
: 这个一般都丢后台,用celery, actor什么的搞了。前面node直接返回了。
: 你这个real time 设计很有难度啊。

z*******3
发帖数: 13709
35

a)
vert.x mail&streaming api
轻轻松松

【在 c*********e 的大作中提到】
: 比如说,要写一个发email的project,要求快,而且要realtime显示发了多少email (a)
: ,实际送
: 出去多少(b),有多少被drop掉(c),而且这3个real time数字要加起来有a= b + c.

z*******3
发帖数: 13709
36
java8, rxjava什么最新的api里面有一种streaming的api
这个用来搞什么real time的counting是绝佳的设计
以前只能用storm这些,现在很多都能用了
还有scalaz这些,不过估计你不太了解
rxjava是这些东东里面最简单的一个,vert.x也很简单
加上vert.x也有mail,web这些,所以用vert.x最好
http://vertx.io/docs/vertx-rx/java/
z*******3
发帖数: 13709
37

了。
vert.x的优势在这个case中发挥得淋漓尽致
首先第一,vert.x不拘泥于web,所以mail很容易搞掂
其次第二,支持多线程,大并发ok
最后第三,支持streaming,单机单node上做汇总ok
这样通过多个层面在单个node上的集成,可以直接干掉不必要的io操作
全部在内存中完成,以实现realtime的要求
实际上vert.x很多use cases都是realtime gaming
比起游戏来说,你这个小意思了
如果realtime要求再高点,就需要介入控制gc了

【在 c*********e 的大作中提到】
: 对呀。市面上有的email发送服务,就做不到realtime 的 a = b + c. 其实也可以来个
: cheat,先把b,c算出来,然后b+c的值赋给a.不过这个对我们程序员来说就没什么价值了。

z*******3
发帖数: 13709
38
写一个verticle,用来对付mail,你的逻辑都在这里面
需要同时对付大并发,你就直接部署多个这样的verticles就好了
然后逻辑完成之后,异步发送json给另外一个verticle
这个verticle就是你的streaming verticle,用rxjava
用来统计a = b+c这些计算
json就是你的msg,就是最后一个结果的msg/json
这样都在同一个虚拟机内完成,就是纯粹的内存计算
就可以直接规避redis,akka,node这些集成带来的不同层之间的io操作
z*******3
发帖数: 13709
39

用vert.x就可以做到real time咯
不需要用到跨tiers的io
直接用vert.x自带的bus就可以发送消息了
然后其他逻辑几乎可以照抄你说的所有逻辑
做一个verticle来取代node
再做另外一个verticle来取代akka
ok啦
vert.x就是强大,看懂了vert.x,这些东西都是小意思

【在 d******e 的大作中提到】
: 这个一般都丢后台,用celery, actor什么的搞了。前面node直接返回了。
: 你这个real time 设计很有难度啊。

z*******3
发帖数: 13709
40
最后还有一个,计算之后的结果,abc这些显示在哪?
如果是real time,你这个gui还得好好设计一下
一种方式就是gui上做一个listener
然后streaming那个verticle处理每一条msg之后
广播出去,gui上接收到后自动update
用udp和异步处理就好了
就是这一步实现起来不比前两步实现起来要容易
虽然gui貌似很low,用不到多少高潮的算法和high逼格的数据结构
但是实际上gui是客户体验的高潮部分,也往往是比较难做的部分
tableau光做一个visualisation,就做成那么大生意
对手下码农开的工资比flg都高,这一块大有可为
相关主题
请教一个 F的message设计问题, 不能理解scala并发
Node 完胜 Ruby呀vert.x 3预计月底发布beta1版本
又看了一下go 感觉Java毫无压力one more c++ question
进入Programming版参与讨论
z*******3
发帖数: 13709
41
vert.x的bus有c++的客户端
如果gui用c++写的话,可以直接接收来自bus里面的msg
但是这个搞起来会比较复杂
我倾向于再写一个广播的verticle
然后自选协议,udp比较好,然后接收到后update
这个应该js, swift, android都可以搞掂,就swift会麻烦点
需要用到第三方类库
p*****2
发帖数: 21240
42
redis可以做counter 而且是persistent的

【在 d******e 的大作中提到】
: 没研究。celery, actor是 task battery pool. redis还是充当消息queue吧。
p*****2
发帖数: 21240
43
drop是怎么算的

了。

【在 c*********e 的大作中提到】
: 对呀。市面上有的email发送服务,就做不到realtime 的 a = b + c. 其实也可以来个
: cheat,先把b,c算出来,然后b+c的值赋给a.不过这个对我们程序员来说就没什么价值了。

c*********e
发帖数: 16335
44
drop就是没发出去,不管什么原因。我把问题简化了。其实drop里有好几种。
这个real time 显示确实有难度。当然,你可以cheat,先把b,c算出来,然后b+c的值赋
给a.这个,骗骗外行,外行还是挺兴奋的。

drop是怎么算的
了。

【在 p*****2 的大作中提到】
: drop是怎么算的
:
: 了。

p*****2
发帖数: 21240
45
难度主要在哪里

【在 c*********e 的大作中提到】
: drop就是没发出去,不管什么原因。我把问题简化了。其实drop里有好几种。
: 这个real time 显示确实有难度。当然,你可以cheat,先把b,c算出来,然后b+c的值赋
: 给a.这个,骗骗外行,外行还是挺兴奋的。
:
: drop是怎么算的
: 了。

c*********e
发帖数: 16335
46
难度在,realtime很有可能 a != b + c

【在 p*****2 的大作中提到】
: 难度主要在哪里
p*****2
发帖数: 21240
47
主要什么原因

【在 c*********e 的大作中提到】
: 难度在,realtime很有可能 a != b + c
c*********e
发帖数: 16335
48
async的时候,就象马拉松赛跑,你不可能随时都让某3个人保持一定距离。

【在 p*****2 的大作中提到】
: 主要什么原因
p*****2
发帖数: 21240
49

我不理解async还是sync对于这三个值的计算有什么区别。你能仔细谈谈吗?

【在 c*********e 的大作中提到】
: async的时候,就象马拉松赛跑,你不可能随时都让某3个人保持一定距离。
z*******3
发帖数: 13709
50

用swift伪码来解释就是
dispatch_async(queue){
//task 1 -> update b/c&update a
}
dispatch_async(queue){
//task 2 -> update b/c&update a
}
dispatch_async(queue){
//task 3 -> update b/c&update a
}
这三个tasks结束的顺序可能是213, 123或者其他什么
然后存a=b+c的时候,一个task需要存两次
一次存b/c,一次存a
当某个task update b/c之后,还没update a的时候,那么完成的b和c的任务总数会等
于a+1
同时,当某两个tasks同时update a的时候,两个都取到a,然后两个都+1之后再update
最后的结果就不是a+2,而是a+1
数据库常见的读写lock,什么dirty read之类的并发问题
用transaction可以搞定,如果是hdfs的话,用zookeeper,如果是内存的话
用java.util.concurrency,如果是vert.x的话,用worker thread+bus msg
如果是swift的话,用dispatch_sync

【在 p*****2 的大作中提到】
:
: 我不理解async还是sync对于这三个值的计算有什么区别。你能仔细谈谈吗?

相关主题
node.js的unavailable傻逼太监懂个屁C*
狗狗抛弃Java转投swift?有专门讲 message server performance 的资料吗
机械硬盘的物理极限redis, kafka
进入Programming版参与讨论
z*******3
发帖数: 13709
51
昨天刚琢磨的gcd,如果要share data between threads的话,用这个
public class SynchronizedArray {
private var array: [T] = [];
private let accessQueue = dispatch_queue_create("SynchronizedArrayAccess
", DISPATCH_QUEUE_SERIAL);

public func append(newElement: T) {
dispatch_async(self.accessQueue) {
self.array.append(newElement);
}
}

public func get() -> T?{
var object:T?;
dispatch_sync(self.accessQueue) {
if self.array.count > 0{
object = self.array.removeAtIndex(0)
}
}
return object;
}

public subscript(index: Int) -> T {
set {
dispatch_async(self.accessQueue) {
self.array[index] = newValue;
}
}
get {
var element: T!;

dispatch_sync(self.accessQueue) {
element = self.array[index];
}

return element;
}
}
}
p*****2
发帖数: 21240
52
这个跟async有什么关系 multi thread不一样吗
用redis就可以解决

【在 z*******3 的大作中提到】
: 昨天刚琢磨的gcd,如果要share data between threads的话,用这个
: public class SynchronizedArray {
: private var array: [T] = [];
: private let accessQueue = dispatch_queue_create("SynchronizedArrayAccess
: ", DISPATCH_QUEUE_SERIAL);
:
: public func append(newElement: T) {
: dispatch_async(self.accessQueue) {
: self.array.append(newElement);
: }

p*****2
发帖数: 21240
53
node的话 如果不persistent 传给master就可以了

SynchronizedArrayAccess

【在 z*******3 的大作中提到】
: 昨天刚琢磨的gcd,如果要share data between threads的话,用这个
: public class SynchronizedArray {
: private var array: [T] = [];
: private let accessQueue = dispatch_queue_create("SynchronizedArrayAccess
: ", DISPATCH_QUEUE_SERIAL);
:
: public func append(newElement: T) {
: dispatch_async(self.accessQueue) {
: self.array.append(newElement);
: }

1 (共1页)
进入Programming版参与讨论
相关主题
Celery in Golang and Scala?Node 完胜 Ruby呀
Pinterest陶涛:三个教训和三个发展选择又看了一下go 感觉Java毫无压力
Spark会干掉Storm吗?scala并发
祝贺peking2升级成Staff & Tech Lead (转载)vert.x 3预计月底发布beta1版本
多线程,异步,并发冲突,fp和其它one more c++ question
难得好文,Linkedin如何用Node beat Python,Ruby,Javanode.js的unavailable
弱问下,UBER后台用的是啥?狗狗抛弃Java转投swift?
请教一个 F的message设计问题, 不能理解机械硬盘的物理极限
相关话题的讨论汇总
话题: dispatch话题: node话题: async话题: log话题: queue