由买买提看人间百态

topics

全部话题 - 话题: 并发
1 2 3 4 5 6 7 8 9 10 下页 末页 (共10页)
c******3
发帖数: 296
1
串行是并发吗?你俩都谈论的是并发。只是你的是多核并发,他的是多机并发。你在核
之间分布,他在机之间分布。
z****e
发帖数: 54598
2
会依次对比node.js, fp, spring, ejb和vert.x的解决方案,然后自己看哪个最好
从最基本的说起,所有语言都一定会有两个东西
一个是变量,我们用var(variable)来表示
另外一个是方法/函数,用func(function)表示
假设有一个函数和一个变量
var var1;
func func1(){
var1 = 0;
return var1+1;//应该是1
}
那现在如果有多个线程并发
那结果会怎样?
那在func1执行完var1 = 0;之后
就有可能有其他线程插入,把var1改成其他值
比如改成var1 = 2; 或者var1 = "goodbug乱入";
那瞬间func1返回值不再是1了,那这个显然是不可接受的
那怎么办?
第一种是fp的做法,fp说,把变量做成immutable
也就是var -> val(value),把var1改成
val1 = 0;
return val1+1;//就一定是1鸟
但是这样为了多线程把所有的参数都搞成immutable鸟
然后你写代码时候,需要时刻提醒自己
常量啊,常量啊,常量啊……
第二种是node.js等... 阅读全帖
z****e
发帖数: 54598
3
会依次对比node.js, fp, spring, ejb和vert.x的解决方案,然后自己看哪个最好
从最基本的说起,所有语言都一定会有两个东西
一个是变量,我们用var(variable)来表示
另外一个是方法/函数,用func(function)表示
假设有一个函数和一个变量
var var1;
func func1(){
var1 = 0;
return var1+1;//应该是1
}
那现在如果有多个线程并发
那结果会怎样?
那在func1执行完var1 = 0;之后
就有可能有其他线程插入,把var1改成其他值
比如改成var1 = 2; 或者var1 = "goodbug乱入";
那瞬间func1返回值不再是1了,那这个显然是不可接受的
那怎么办?
第一种是fp的做法,fp说,把变量做成immutable
也就是var -> val(value),把var1改成
val1 = 0;
return val1+1;//就一定是1鸟
但是这样为了多线程把所有的参数都搞成immutable鸟
然后你写代码时候,需要时刻提醒自己
常量啊,常量啊,常量啊……
第二种是node.js等... 阅读全帖
A*******e
发帖数: 2419
4
【 以下文字转载自 Programming 讨论区 】
发信人: AlphaCode (Alpha), 信区: Programming
标 题: C++并发和Java并发有多大区别?
发信站: BBS 未名空间站 (Tue Jun 16 02:51:52 2015, 美东)
手头两本书都有,从哪本开始比较好?
C++ concurrency in action
Java concurrency in practice
对C++熟悉一些,但Java更流行?不知内容是否大同小异。
B*****g
发帖数: 34098
5
【 以下文字转载自 Programming 讨论区 】
发信人: qxc (法界闲人), 信区: Programming
标 题: 学习了学习了!数据库火车票的高效并发实现
发信站: BBS 未名空间站 (Sun Feb 9 01:58:51 2014, 美东)
带了一天 2个娃, 简直不是人干的事情。。。
废话少说, 直接上干货。
前面我们的数据库, 都有个思维陷阱 -- 吧数据库当 java/C 了。 设立了各种和车
站车次物理模型符合的数据结构, 弄得各种不爽, 而且无法并发 - 卖一个站, 这个
站相关的所有其他票都受影响。
下面直接上简化的 psudo code. 大家都是聪明人,其他部分脑补。 这个办法的各种
log(n),甚至 o(1) 效率是很明显的。
tickets
{
id
trainid
start
end
type
transaction_id // null if unsold.
duration ( ==end - start) // 选座优化用
}
比如 车次 X 从 s0 .... s19. 那么一开始 3000 张票, 从 0 到 19.
售出... 阅读全帖
T********i
发帖数: 2416
6
不是啥都能并发的。单机里面的都是不能并发的。
T********i
发帖数: 2416
7
单机能并发不见得机群能并发。通信开销差了几个数量级的。
p*****2
发帖数: 21240
8
来自主题: Programming版 - 请java大牛谈谈大并发的解决方案

不只是网络的异步。异步是针对所有IO的。Java上的并发是多线程,但是其他语言中的
并发并不是这个样子的。现在支持高并发的主要的手段就是干掉多线程。
s*********n
发帖数: 35
9
Memcached这种内存型数据库Server的性能瓶颈主要在网络,因为内存数据结构的一次
操作需要的时间会比一次网络I/O的时间低一个数量级以上。所以内存数据结构再怎么
考究也不会对并发性有太大影响, 所谓的高并发也是相对于传统持久化的数据库。
q*c
发帖数: 9453
10
带了一天 2个娃, 简直不是人干的事情。。。
废话少说, 直接上干货。
前面我们的数据库, 都有个思维陷阱 -- 吧数据库当 java/C 了。 设立了各种和车
站车次物理模型符合的数据结构, 弄得各种不爽, 而且无法并发 - 卖一个站, 这个
站相关的所有其他票都受影响。
下面直接上简化的 psudo code. 大家都是聪明人,其他部分脑补。 这个办法的各种
log(n),甚至 o(1) 效率是很明显的。
tickets
{
id
trainid
start
end
type
transaction_id // null if unsold.
duration ( ==end - start) // 选座优化用
}
比如 车次 X 从 s0 .... s19. 那么一开始 3000 张票, 从 0 到 19.
售出交易id = null
有人买一张从0 到19 的全程票,
start transaction
select top 1 ticket where start <= request.start and end >= request.end and
transactio... 阅读全帖
N********n
发帖数: 8363
11

紧耦合的情况不能并发,因为得不偿失。比如联程票还有FIFO的MSG QUEUE.
z****e
发帖数: 54598
12
目的决定手段
计数器就是计数器
多线程并发都要改回单线程
你能做得再简单点不?
p*****2
发帖数: 21240
13
来自主题: Programming版 - 请java大牛谈谈大并发的解决方案

目前来看JVM上的并发比较落后了,如果不想用node的话,可以上go或者erlang。当然
很多应用的并发量也并不大,Java完全没有问题。
p*****w
发帖数: 429
14
来自主题: Programming版 - 请java大牛谈谈大并发的解决方案
你把网络上的异步和java的并发相提并论就不是很恰当。java考虑更多是并发运算和他
们之间的同步。网络的异步首先是一种模块化的结果。和软件上的多线程是解决不同的
问题。很难放到一起谈。

原因
vert.
见流
独立
实用
Google要
d*******r
发帖数: 3299
15
来自主题: Programming版 - 请java大牛谈谈大并发的解决方案
"现在支持高并发的主要的手段就是干掉多线程。"
我觉得主要手段是不使用多线程编程,但不等于下层不用多线程。Linux底层就把线程
和进程一样对待的。
现在异步,event_loop 这些大并发效率更高,*本质* 原因我觉得是这个:
用 event_loop 和 event_handler 这些东西进一步把OS的一个执行单元(线程或者进程
) 掰开成了更小的各种执行单元 (e.g. event_handlers scheduled by event_loop).
这些执行单元 schedule 起来更轻量级,所以效率更高。
p*****2
发帖数: 21240
16
来自主题: Programming版 - 请java大牛谈谈大并发的解决方案

consistency
大牛说到点上了。不过对于做web server来说,不需要机器之间的通信,因此一台机器
并发就够了,然后堆机器。
akka的优势在于distributed,这个go,stm都没办法,包括node,都不是做这个的。
akka也可以做单机并发,但是对于多机来说,竞争对手就是storm等了。
w***g
发帖数: 5958
17
C++11的并发性支持后面是pthread, 虽然马甲看起来差不多,但怕是经不起高并发的任
务。有人benchmark过吗?
s******c
发帖数: 1920
18
我用golang写过很原始的分布式系统project。几点感受关于golang适合并发的说法:
1, 基本上golang的语言特性比如chan之类的,会引导你从开始就使用event driven的
model,非常自然。
2, goroutine比thread更轻量,轻松做到单机上千的并发。
p*****2
发帖数: 21240
19
来自主题: Programming版 - scala并发

多线程并发还是不够好。
我又看了看,感觉scala有这几种并发模式,但是async IO还是很麻烦。准备看看Go了
。Async的话,Node和Go做的更好。
S*A
发帖数: 7142
20
理论上用 goroutine 来替代 thread,
用 channel 协助调度是比较干净的一个模型。
但是实际中发现,如果每个 tcp 连接都是一个
goroutine 来处理,如果同时很多个 tcp 连接
同时并发发送数据,很容易就出现 tcp connection
reset。
google 了一下,发现有其他人抱怨类似的问题。
解决办法是用什么work pool 之类的限制并发
同时发送的数量。如果这么搞反而就比较麻烦了,
因为 goroutine 本来就是隔离了和 thread
这些打交道,用 work pool 这些其实就是变相
用 thread 来调度。隔靴挠痒的感觉。
求指点。
另外一个发现的问题是,go 貌似不能直接用 raw
data。从网络来到数据包需要经过 decode 过程
才能包裹到 go 的 struct。这个过程需要一个一个
byte shift 到其他类型的type 里面去。不知道
有没有其他好点办法.反正用 native go 貌似没
有好办法的,因为要 box go 的类型。低带宽的数据
可以这么搞,高带宽的数据这么过一下手会浪费一些
CPU。
S*A
发帖数: 7142
21
我没有解释清楚,raw data 经过打包是可以用的,但是打包
过程需要 copy 一次数据。这个看看https://golang.org/src/encoding/binary/
binary.go
这个貌似是最接近的了,里面要根据接受方的类型一个 byte 一个
byte 来拼凑数据。
tcp reset 这个这个问题直观上是并发的网络数目相关的。
这里用到的网络比较类似群讨论,server 上面挂一大堆 client。
server收到一个 message 就直接 forward 给一大堆 client。
不是 time out,直接 tcp reset 那个 connection 断了。
Anyway,google 看了一下,很多其他地方有提到,对于高并发这
些直接用 goroutine 来处理每个 tcp 连接是不合适的。
例如这里他们的解决办法是抛弃 goroutine 用 work pool:
http://marcio.io/2015/07/handling-1-million-requests-per-minute-with-golang/
goroutine 这个愿... 阅读全帖
w********m
发帖数: 1137
22
不知道你怎么实现的,不好说。
每个client对应的是server上的一个channel。
如果reset太快,把channel改成buffered的channel可能好点。
有时候是资源耗尽了,disk IO,network IO,memory,etc
这时候要加semaphore控制并发。
你可以把The Go Programming Language 里面的chatroom编译一遍,看看能有多少并发。
S*A
发帖数: 7142
23
内存还是大大的有。其他还能有什么资源。
感觉是 go 的编程模式的问题。
比较正规的解法是用 epoll 这种 call back 的方式来处理的。
go 用那个 non blocking mode IO 和goroutine 在即将要
block 的时候才去换goroutine。这种方式上不了比较大规模。
anyway。 网上看来有不少分享都是要上大并发要去掉 goroutine。
这个我感觉应该是 go 本身编程模式的问题。go 自己的 scheduler
并不适合干大并发。你想想每个 goroutine 都有自己的context
内存。连接多了这个很费的。
S*A
发帖数: 7142
24

你去看看我前面引用的文章讨论了这个问题而且给出了
解决办法。
http://marcio.io/2015/07/handling-1-million-requests-per-minute-with-golang/
简单的说,就是不能用简单的goroutine 对应一个 tcp
socket 的方法。需要搞 server pool 这些。避免
太多 goroutine 来处理并发。
不是说 go 不能搞,是不能简单粗暴用 goroutine 和
tcp connection 对应的阻塞方式指望 go 的 scheduler
能解决大并发问题。
S*A
发帖数: 7142
25

我知道这个 :-),不是这个问题。
发送的不需要交互,拿到新的 message 需要尽快 publish 给所有其他的 client 。
client 会根据收到的东西发回一个 reply message。这个 reply message
需要有点交互,例如 server 端 update 某些信息要上锁这些。
可以用 Go 自己做 epoll + event。我正在实验。我已经看出来会比
goroutine 好很多。
直接用 goroutine 1:1 socket 不适合做大并发,这个是我想讨论的事情。
其实远远没有到大并发简单的就不行了,大家有兴趣可以试试。这个是我用了
了一下 go 觉得比较坑的地方。
l******i
发帖数: 4666
26
【 以下文字转载自 Salon 讨论区 】
发信人: liangzhi (良知), 信区: Salon
标 题: 抗议MITBBS一再侮辱沙龙版的行为并发包子
发信站: BBS 未名空间站 (Sat Oct 25 11:45:34 2008)
抗议MITBBS一再侮辱沙龙版的行为并发包子
自上次中国新闻版大选后, 大量来源不名的ID主导了中国新闻的局势,新上台的流氓ID
NYT不顾站规任意封人删贴造成大量ID成为难民,在沙龙版聚集并逐渐形成规模,而后
MITBBS多次无理帮助捣乱的流氓ID前来捣乱,造成人心思变.
1. 前中新版务mykr2003多次利用发布脑残文章,在买买提各版均被骂成一片. 版主
为表明该流氓ID不代表本版的观点,在其贴中注明作者简介(站务修改题目都成为常事,
反指责版主注明作者来历),得到读者的认可,而MITBBS则冒天下之大不韪,站在支持流氓
ID的立场. 该流氓ID动用五个马甲发布60余篇一谩骂的贴,站方视而不见, 但同时能够
根据流氓ID的投诉删除某著名ID(弃婴)调侃NYT的文章并定为人身攻击,不仅执法不公而
且还发信指责版主.
2. 今日另
i**o
发帖数: 1161
27
如果机器内存cpu资源有限,建议用这个版本,一个窗口就可以并发
任意多线程连接。
如果机器够强,建议和另外一个版本一起上,双保险。
1。 下载antijapan_v3.exe
http://s13.yousendit.com/d.aspx?id=3ISNC1R51T3G12GQR3QYRV6HDP
2. 直接双击运行,默认100线程,
3。也可在dos下运行,可自行设定线程数,运行方式:
antijapan_v3 200
*200为线程数。
这个版本是针对现在这次投票的。
i***0
发帖数: 8469
28
我是谷歌中国人事部的t陶翊翌. 我们现在正在为谷歌合资公司谷翔招聘软件工程师及
软件测试工程师。
请见以下的职位简介。如果您有认识的朋友可能会对谷翔机会感兴趣的话,请联系我们
并发一份更新的简历过来。
如果有任何问题可以跟我联系: t*****[email protected] 直线电话:010-62503416
期待您的答复!
陶翊翌
公司介绍
谷翔信息技术有限公司("谷翔")是谷歌与其中方合作伙伴在中国共同投资成立的一家
中外合资经营企业。谷翔现持有google.cn和265.com等网站运营的ICP经营许可证,其
目前主要运营的产品包括产品搜索、音乐搜索和在线翻译。
软件工程师-北京(合资公司谷翔)
The Role
作为谷歌合资公司谷翔的软件工程师,我们同样期待您的创新与激情。软件工程师能够
根据项目需要,独立设计和开发基于互联网的应用程序。根据实际问题,分析和处理大
批量数据。基于项目需求,快速开发内部工具。
Responsibilities
开发基于互联网的应用程序
开发内部工具
分析和处理大批量数据
s********e
发帖数: 340
29
请问如何回答: 如何设计和支持一个高并发,健壮的Java Web应用?
被问到了这样一个面试题,请有经验的人指点一下如何回答? 能否介绍一些用到的技
术?
不知道该如何回答这样的问题。
T*********g
发帖数: 496
30
我自己是做Java Web的,访问量和用户都不算小。我大概介绍一下我们的架构给你一点
IDEA。
1) 首先你需要一个健壮的Container,Weblogic一直是我们的最爱。动态内容都交给它

2) 需要一个强壮的Web server来处理静态内容,Apache或者Nigix都是很好的选择,它
们也可以用来做reverse proxy
3) 根据你的需求来确定一个缓存系统来提高访问效率,我们用oracle coherence
4) 一个数据库,我们是oracle rac
5) 前端一定要做优化,对于静态内容,在可能的情况下,给http header加上expire来
避免HTTP Request,多个JS File最好做min,并且聚合成一个文件以减少HTTP REQUEST