由买买提看人间百态

topics

全部话题 - 话题: 多线程
1 2 3 4 5 6 7 8 9 10 下页 末页 (共10页)
R********n
发帖数: 3601
1
来自主题: Military版 - 我是一个线程 (转载)
【 以下文字转载自 Joke 讨论区 】
发信人: xiaopo (小坡), 信区: Joke
标 题: 我是一个线程
发信站: BBS 未名空间站 (Fri Apr 1 15:10:41 2016, 美东)
zt
我是一个线程 2016-03-30 IBM刘欣 程序猿
我是一个线程, 我一出生就被编了个号: 0x3704, 然后被领到一个昏暗的屋子里,
这里我发现了很多和我一模一样的同伴。
我身边的同伴0x6900 待的时间比较长, 他带着沧桑的口气对我说:
我们线程的宿命就是处理包裹。 把包裹处理完以后还得马上回到这里,否则可能永远
回不来了。
我一脸懵懂,包裹,什么包裹?
”不要着急,马上你就会明白了, 我们这里是不养闲人的。“
果然,没多久,屋子的门开了, 一个面貌凶恶的家伙吼道:
"0x3704 ,出来!"
我一出来就被塞了一个沉甸甸的包裹,上面还有附带着一个写满了操作步骤的纸。
"快去,把这个包裹处理了。"
"去哪儿处理"
"跟着指示走, 先到就绪车间"
果然,地上有指示箭头,跟着它来到了一间明亮的大屋子,这里已经有不少线程了,
大家都很紧张,好像时刻准备着往前冲。
... 阅读全帖
x****o
发帖数: 21566
2
来自主题: Joke版 - 我是一个线程
zt
我是一个线程 2016-03-30 IBM刘欣 程序猿
我是一个线程, 我一出生就被编了个号: 0x3704, 然后被领到一个昏暗的屋子里,
这里我发现了很多和我一模一样的同伴。
我身边的同伴0x6900 待的时间比较长, 他带着沧桑的口气对我说:
我们线程的宿命就是处理包裹。 把包裹处理完以后还得马上回到这里,否则可能永远
回不来了。
我一脸懵懂,包裹,什么包裹?
”不要着急,马上你就会明白了, 我们这里是不养闲人的。“
果然,没多久,屋子的门开了, 一个面貌凶恶的家伙吼道:
"0x3704 ,出来!"
我一出来就被塞了一个沉甸甸的包裹,上面还有附带着一个写满了操作步骤的纸。
"快去,把这个包裹处理了。"
"去哪儿处理"
"跟着指示走, 先到就绪车间"
果然,地上有指示箭头,跟着它来到了一间明亮的大屋子,这里已经有不少线程了,
大家都很紧张,好像时刻准备着往前冲。
我刚一进来,就听见广播说:“0x3704, 进入车间”
我赶紧往前走, 身后很多人议论说:
”他太幸运了, 刚进入就绪状态就能运行“
”是不是有关系?“
”不是,你看人家的优先级多高啊, 唉“
前边就是车间, 这里... 阅读全帖
z**********3
发帖数: 11979
3
来自主题: Programming版 - 我是一个线程 (转载)
【 以下文字转载自 Joke 讨论区 】
发信人: xiaopo (小坡), 信区: Joke
标 题: 我是一个线程
发信站: BBS 未名空间站 (Fri Apr 1 15:10:41 2016, 美东)
zt
我是一个线程 2016-03-30 IBM刘欣 程序猿
我是一个线程, 我一出生就被编了个号: 0x3704, 然后被领到一个昏暗的屋子里,
这里我发现了很多和我一模一样的同伴。
我身边的同伴0x6900 待的时间比较长, 他带着沧桑的口气对我说:
我们线程的宿命就是处理包裹。 把包裹处理完以后还得马上回到这里,否则可能永远
回不来了。
我一脸懵懂,包裹,什么包裹?
”不要着急,马上你就会明白了, 我们这里是不养闲人的。“
果然,没多久,屋子的门开了, 一个面貌凶恶的家伙吼道:
"0x3704 ,出来!"
我一出来就被塞了一个沉甸甸的包裹,上面还有附带着一个写满了操作步骤的纸。
"快去,把这个包裹处理了。"
"去哪儿处理"
"跟着指示走, 先到就绪车间"
果然,地上有指示箭头,跟着它来到了一间明亮的大屋子,这里已经有不少线程了,
大家都很紧张,好像时刻准备着往前冲。
... 阅读全帖
w***u
发帖数: 156
4
来自主题: JobHunting版 - c++posix多线程问题请教 (转载)
【 以下文字转载自 Programming 讨论区 】
发信人: wyseu (wy_seu), 信区: Programming
标 题: c++posix多线程问题请教
关键字: 多线程
发信站: BBS 未名空间站 (Wed Feb 18 03:19:44 2015, 美东)
最近要写一个多线程的应用, 碰到一些问题,
主线程在一开始就create好4个子线程,子线程一开始wait状态,然后主线程开始往下
走,开始task准备分给子线程,然后broadcast给子线程,自己进入wait状态, 子线程
wakeup,做完task,就wait,做后一个子线程完成后,发信号给主线程,然后wait,
主线程在接到信号后,wakeup,继续下一个task, 然后broadcast。问题是主线程激活
到broadcast时间很短, 而子线程从发信号到wait时间长的话,主线程broadcast的信
号就不会正确叫醒子线程,因为那时的子线程还没有进入wait状态。 如何解决呢?其
实就是要实现一个join的功能,但是又不要释放掉子线程,
w***u
发帖数: 156
5
【 以下文字转载自 Programming 讨论区 】
发信人: wyseu (wy_seu), 信区: Programming
标 题: c++posix多线程问题请教
关键字: 多线程
发信站: BBS 未名空间站 (Wed Feb 18 03:19:44 2015, 美东)
最近要写一个多线程的应用, 碰到一些问题,
主线程在一开始就create好4个子线程,子线程一开始wait状态,然后主线程开始往下
走,开始task准备分给子线程,然后broadcast给子线程,自己进入wait状态, 子线程
wakeup,做完task,就wait,做后一个子线程完成后,发信号给主线程,然后wait,
主线程在接到信号后,wakeup,继续下一个task, 然后broadcast。问题是主线程激活
到broadcast时间很短, 而子线程从发信号到wait时间长的话,主线程broadcast的信
号就不会正确叫醒子线程,因为那时的子线程还没有进入wait状态。 如何解决呢?其
实就是要实现一个join的功能,但是又不要释放掉子线程,
w***u
发帖数: 156
6
来自主题: Programming版 - c++posix多线程问题请教
最近要写一个多线程的应用, 碰到一些问题,
主线程在一开始就create好4个子线程,子线程一开始wait状态,然后主线程开始往下
走,开始task准备分给子线程,然后broadcast给子线程,自己进入wait状态, 子线程
wakeup,做完task,就wait,做后一个子线程完成后,发信号给主线程,然后wait,
主线程在接到信号后,wakeup,继续下一个task, 然后broadcast。问题是主线程激活
到broadcast时间很短, 而子线程从发信号到wait时间长的话,主线程broadcast的信
号就不会正确叫醒子线程,因为那时的子线程还没有进入wait状态。 如何解决呢?其
实就是要实现一个join的功能,但是又不要释放掉子线程,
z****e
发帖数: 54598
7
会依次对比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
8
会依次对比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等... 阅读全帖
b***i
发帖数: 3043
9
来自主题: Programming版 - Java的多线程的一般问题
谢谢,看了大家的回复,看来有希望。
我要做的是这么一件事情。我拿到一个项目的源代码,整个项目实现有好几十个类,其
中具体操作的实现里面有几百个函数,其中大约10几个是有关访问网页的,其他的是计
算。中间嵌套调用很多。举个例子,比如,读网页,分析网页,这些都是有一个共用的
变量来记录现在的状态的。这个项目只能读写一个网页。
我想把多线程加进去,比如一个线程读一个网页,另一个可以读另一个。但是,我现在
有一个static的控制变量,如果一个线程改了该网页的状态,如成功与否,是否再试一
次,网页内容多少,另一个就发现也改了。
怎么做呢?我想的就是生成多个控制变量数组,或者每个线程动态生成这个控制变量,
把这个变量
传入相关的每一个函数。有180多个。
另一个办法,是不用改180个函数的定义,而是在每个具体相关的函数(大约10个)需
要首先获得当前线程的id,然后在控制变量的数组里面取出这个线程对应的那个控制变
量。这个只要保证线程id不超过100个,我数组先定义个1000这么大。
本质上,是每个线程运行的时候,从线程堆栈里找出线程的唯一的标志信息,然后取得
和该线程对应的控制变量。这个变量是... 阅读全帖
z*******3
发帖数: 13709
10
来自主题: Java版 - 多线程真头疼,但也挺有趣
多线程最好要割离各个资源之间的联系
对于互相依赖的部分,其实很难用多线程来优化
而且会因为资源之间的协调而导致冲突
造成额外的浪费,还不如用单线程
常见的就是游戏客户端,其实大部分游戏界面都是伪多线程
其本质就是一个单线程程序
现在连web也在逐步变成单线程的
当然还是有多线程,但是并不是完全意义上的多线程
而是主线程+分支线程,类似swing那种模式
对于特别消耗时间的任务,才新起线程去做
其他的,主线程搞定
真正的多线程现在仅仅在企业系统集成的后端才会看到
前端交给单线程去搞定
r******r
发帖数: 700
11
来自主题: Java版 - 多线程真头疼,但也挺有趣
有点点长啊。
有一个 tool, 以前处理的数据比较少,所以速度,时间都不成问题。但现在需要处理
的数据增大,速度问题就突出了。费了好大一番力气,总算弄通了,一次处理的时间由
原来的 24 个小时,减小为 3 个小时。
第一次弄多线程,很费劲。但弄通了(只是这个小 task 弄通了,并非多线程弄通了)
,又觉得很有意思,小有成就感。分享一下,希望对 beginner 有帮助,也希望有经验
的多指教。其中有些地方,还没有完全明白,正在学习-ing。
程序其实也简单,就是在单机上运行的一个程序。过去单线程的,即使在多 core 的机
器上运行,也只能利用处理器的少部分能力。现在就是要改为多线程,多核处理。
数据存在 10 个文本文件中,每个大约 40M.程序从每个文件逐行读取,逐行处理,很
多信息被保存到不同的数据结构中。最后输出处理报告,中间还要将部分处理信息输出
到一个 XML 文件中。
经过一番 google search 和研究,所做的改动包括:
1) 将原来的逐行读取,逐行处理,改为先将每个文件的所有行读到一个新建的
DataStore 中,这个结构比较简单。就是保持原来的每行文... 阅读全帖
z****e
发帖数: 54598
12
来自主题: Programming版 - 单线程多线程说到底
就是一个调度问题
一般多线程本质就是交给os去做调度
做成单线程,等于自己去做调度,纯粹吃太饱了撑着
如果只是为了躲开lock的话
压根没有必要,有的是办法
随便一个web server/web service server/app server什么都可以做到
单线程模式,主要是用在游戏上
因为游戏上如果用多线程,随便一个锁出问题
整个屏幕就停滞了,游戏因为动画原因,所以对一些细微的变化
很敏感,所以千万不要搞成多线程,一旦冲突整个游戏就挂了
要搞成伪的多线程,就是单主线程加辅助线程的模式
这就是伪多线程的由来,如果你google一下游戏多线程
就能看到很多这样的例子,教你怎么用单线程来替换多线程
但是对于server来说,其实你没有必要自己去搞
因为一来,你有各种server软件帮你做,你不需要用到各种锁
或者说你不需要自己去倒腾锁
其次就是,不管怎样,多cpu多core是趋势
你自己处理调度,就没事找事
因为os早搞定很多年了,没有必要
比如老魏那种,连cpu多少个core,每个core做什么都要自己调度
我哭了,老魏要是一不小心上班路上出了点啥意外,写的代码别人连接手都无法接手
... 阅读全帖
s********e
发帖数: 340
13
碰到一个面试题:
如果使用Java线程池,比如ExecuteService线程池,有10个线程,这100个线程一起完
成一个任务。
主线程需要等待这个线程池中的100个线程完成后,再执行比如打印结果的任务。
如何让main主线程等待线程池的线程都完成任务后,再执行?
这个需求该如何实现?
我开始说,把主线程的优先级设的比较小,这样优先级就比较低了,但是这个答案不是
面试官期望的。
g*****g
发帖数: 34805
14
来自主题: Java版 - 问个多线程的问题
我有一个程序,主线程需要等几个线程结束后做一些动作。
通常用join就可以解决。现在的问题是这个其实是一个三级的层次。
主线程产生一些子线程,这些子线程又分别产生一些孙线程,等孙
线程结束后子线程需要做一些处理。所有的孙线程都扔进一个ThreadPoolExcutor
执行。我的理解孙线程何时开始是由ThreadPool决定的。这样在子
线程里用join等待似乎不成吧?
z*******3
发帖数: 13709
15
几个多线程类
vector, hashtable都是线程安全的,synchronized了
但是效率比较低,因为改变里面任何一个element都要lock整个对象
那么为了提高效率
后来线程不安全的hashmap和arraylist大行其道
为了让程序员摆脱多线程思考的痛苦
java.util.concurrent包里面推出了
concurrenthashmap和copyandwritearraylist这些类
这些类是线程安全的,但是提高了效率,并发时候操作这些类是安全的
所以理论上应该用这些类替换vector这些老类
类似的
hashset也是线程不安全的
如果需要线程安全用
copyandwritehashset
另外,stringbuffer是线程安全的
在不需要考虑线程安全的环境中
用stringbuilder效率高
借用古德霸说过的一句话总结
尽可能多用线程不安全的类,只有当你不得不用的时候才用线程安全的类
z****e
发帖数: 54598
16
来自主题: Programming版 - 单线程一般都是历史原因
比如脚本,脚本本身就是简化编程,不需要理解各种乱七八糟的概念
就能上手写的东西,那当然默认就是单线程的,上来就多线程
那还简化什么?
还有一个是gui,因为人眼对刷新频率非常敏感
如果低于一定频率,人眼会明显感觉到差异
所以一定要保证ui线程刷新不被打断
一般多线程的冲突和锁对于ui线程的影响是致命的
所以尽量简化,就不要搞多线程了
即便多线程更接近客观事实
这个主要是在游戏上用得比较多
如果你问游戏里面得多线程
一般下面就会有人回答说,你要控制主线程
然后让主线程loop,然后控制每一次loop消耗时间酱紫
这就是所谓的伪多线程
c********l
发帖数: 8138
17
【 以下文字转载自 Programming 讨论区 】
发信人: coupondeal (Coupon Deal), 信区: Programming
标 题: Java 多线程 的架构如何改进?
发信站: BBS 未名空间站 (Tue Jul 9 22:12:35 2013, 美东)
目前有这么一个程序,共有如下三种线程:
1,GUI主线程, non-daemon
2,2个服务器线程,分别监听端口号为8000和8001的socket, non-daemon
3,每当服务器socket.accept()时,生成一个新的daemon线程,
然后在这些n个新生成的并发线程中处理具体业务。
所以,主线程,服务器线程,daemon线程,这三种线程目前是三个实现Runnable的类
上述设计比较过时,因为是用的非常传统的implements Runnable的教科书式方法
有没有更先进的,比如Future/Callable/ExecutorService?
如果是这样,那么具体应该如何改进?
z*******3
发帖数: 13709
18
来自主题: Java版 - 多线程真头疼,但也挺有趣
呼呼,你楼上一凶
猴屁股都被你吓走了
我觉得他说不会快的理由大概跟你这个看到的一致
也就是在datasource的时候,楼主用了同步
所以所有线程不得不排队读取
而且貌似楼主对于输出也做了同步,而且要依次输出
所以输入和输出同时被掐住,都需要排队的前提下
那么除非中间处理时间很长,否则是不会快的
因为这样的话,单线程跟多线程其实木有太大区别
反正输入和输出都要排队,中间的多线程如果在单核机器上的话
其实也是伪的多线程,所以不会快
所以多线程最主要的是隔离线程之间的通信
通信越少多线程越有优势
这也是spring这个框架的理论基础
所有的组件都推荐是无状态的
所有变量跟线程本身绑定,变成thread local
然后这样就可以尽最大可能提高效率

non
h****g
发帖数: 772
19
来自主题: Programming版 - 晕了,多线程,共享内存的问题
这个问题我描述不清楚,看有没有大侠能猜明白我想干什么
现在在写一个程序,要用多线程
线程1,从板1采集数据到缓冲区
线程2,从板2采集数据到缓冲区
线程3,缓冲区调度
线程4,处理板1的数据
线程5,处理板2的数据
线程6,用户数据后处理
线程?,GUI
线程4和5是一直转的,处理结果放到一个大的用户数据结构里面,理论上是不重叠的
数据还需要一些后处理,这个后处理应该放在哪里比较合理呢?
后处理会用到板1和板2的结果
选项1:
用户数据结构索引从1开始,有一个板号的属性,这样后处理更方便
选项2
把用户数绝结构分开成2部分,分别对应各自的板子
c********l
发帖数: 8138
20
来自主题: Programming版 - Java 多线程 的架构如何改进?
目前有这么一个程序,共有如下三种线程:
1,GUI主线程, non-daemon
2,2个服务器线程,分别监听端口号为8000和8001的socket, non-daemon
3,每当服务器socket.accept()时,生成一个新的daemon线程,
然后在这些n个新生成的并发线程中处理具体业务。
所以,主线程,服务器线程,daemon线程,这三种线程目前是三个实现Runnable的类
上述设计比较过时,因为是用的非常传统的implements Runnable的教科书式方法
有没有更先进的,比如Future/Callable/ExecutorService?
如果是这样,那么具体应该如何改进?
h*d
发帖数: 214
21
来自主题: Programming版 - 单线程多线程说到底

......
这么说感觉你对多线程编程不熟悉啊。决大部分的GUI API都是单线程的,照你这么说
GUI应用开发也不能用多线程了?用单线程写游戏的一个优势就是容易同步控制所有游
戏元素更新。这个在多线程里可以作到但是需要更多的多线程编写的技能。但无论如何
,GUI的更新绝对是要在一个线程里操作的。这个可能就是你误以为的游戏就是单线程
的。
z****e
发帖数: 54598
22
来自主题: Programming版 - 用python写多线程。刘姥姥都笑了
所有脚本的多线程都是最弱的一块
可能也就是perl会好一点
不过现在多线程部分
主要是swift和scala在做咯
java提供了几个常用的pkg
但是无论server side还是client side
自己去动手搞多线程的次数也很少
server side有现成的框架,akka,vert.x,都可以直接用
client side的app,那用伪多线程就好了,反正只要伺候好一个ui线程
android我只弄双线程,一个输入线程,另外一个是主循环
ios直接用cocoa了,所以还不知道后面是几个线程
javafx用单线程足够,90fps完全可以搞定
p*****y
发帖数: 1049
23
有一个多线程的问题,我困惑了好久。多线程的mutex锁,是锁资源还是锁代码?
举个例子 我有100个文件存在磁盘上,分别命名为1.txt, 2.txt, 3.txt ...... 100.
txt.
现在我要创建多个线程,去往文件存东西。举例子如下(C++)。
mutex mx;
void write_to_file(string filename, string binary_data)
{
unique_lock lk(mx);
fstream f(filename);
f.write(&(binary_data[0]), binary_data.size());
f.close();
}
这段代码看似没有问题,但是却有个缺陷:锁的是代码,并非资源。换句话说,在多线
程下,任何
一个线程都会被另外一个线程block住,因为这里只要有两个线程同时碰到这个锁,就
会出现锁问题。
这时的多线程毫无意义了,因为这个函数其实无法并行。
可问题是,我往一个文件1.txt里面写东西,不应该影响另外一个线程往2.txt里面写东
西。
所以是不是应该锁资源,而不... 阅读全帖
d****g
发帖数: 1049
24
来自主题: Java版 - 问个多线程的问题。
正在学multithreading. 现在不知道该如何在主程序里
等待所有线程都结束以后再执行以后的程序段。比如说:
我有个主程序产生一个菜单,每个菜单项执行一堆线程。
(比如说是一个for loop生成10个线程,等待1秒后再生成10个线程.
这20个线程同时执行大量计算。
我怎么能在主程序里知道这堆线程全部完成了,然后再显示菜单?是不是
必须用join(), 并且是在所有线程生成以后再执行join()?
还是可以生成一个线程就join()?
可不可以用Thread.activeCount()来做并且避免busy waiting?
g*****g
发帖数: 34805
25
来自主题: Programming版 - 多线程编程前景如何?
不需要多线程的程序永远不需要多线程来实现,
绝大部分个人软件都不需要多线程。需要多线程
的是网络程序,科学计算程序,服务器
程序。
所以个人软件上多线程恐怕永远不会成为主流,单线程
已经实时了,你多线程干啥呢?
至于服务器上,多线程已经主流了吧。至少俺们做企业应用
的java程序员是这样。
z****e
发帖数: 54598
26
来自主题: Programming版 - 单线程一般都是历史原因
nonblock主要是为了不打断主线程
但是有些时候有些任务又会占用线程太长时间
所以如果不让主线程继续刷新的话
整个画面就停滞了,所以必需先放开主线程
也就是ui线程,然后分配时间片给另外启动的那个线程
等另外那个线程执行结束之后,再让主线程callback那个结果
酱紫
话说做图形学的话,这些应该是常见的问题
不明白几个做图形的为什么不结合实际例子回答这种问题
x*****0
发帖数: 452
27
Assume in a system, users will register a callback function with system and
that callback function will be called when an event is triggered
but if the event is already triggered, the user will synchronously call
the callback function
For example
suppose user i registers cb i at time Ti,
and the event happens at time Te
and assume that T1 < T2 < T3 <...< Tm < Te < Tm+1 < ... < Tn
at time Te, cb1..cbm will be called
cbm+1 .. cbn will be called synchronously
impleme... 阅读全帖
h**********c
发帖数: 4120
28
问题是这样的.
我的机器是vista 32,q 6600 单CPU
大概有两亿个左右的任务,互相独立,其实都是简单的数学运算.
我首先用最普通的c++ 写了个单线程程序,跑了大概994.77100秒.
然后照着一个msdn上的例题,改为3个线程,跑了1729.13400秒;
6个线程,1756.93700秒.
问题:
1.怎么解释这一现象,多线程反倒慢了?
2.程序贴在楼下,请高人帮分析分析,如何优化,还是vista对这种问题已经优化,多线程
是没有必要的?
3.如果是多个cpu的话,多线程程序能否就会比单线程快?
有没有什么软件能模拟多个cpu环境?
搞科学计算没办法.多个cpu的机器太贵.
谢谢!
l********o
发帖数: 33
29
不太擅长多线程,没看代码瞎扯几句:如果你的线程体只是简单运算,那就要看看线程
管理的开销,如果是独立的任务,不要做同步的管理,否则线程会在主线程里面干等。
多线程你还是得试一试unix下的编程,另外如果不是做服务器为什么你要用多线程在单
机上做这个事情呢?
M********t
发帖数: 5032
30
来自主题: Hardware版 - AMD Zen内核架构图首曝:32核心64线程 快科技 vivian 6小时47分钟前 AMD Zen全新架构的处理器将在2017年发布,陆续登陆桌面、服务器等市场。不同于当前推土机架构的双核合一模块,Zen将回归传统独立核心设计,并且有很特殊的组合方式。此前我们就曾介绍过,Zen处理器的基础模块叫做“Zeppelin”(齐柏林/ZP),今天我们第一次看到了它的基本架构图:可以清楚地看到,每一个Zeppelin模块都有8个物理核心(16个线程),每核心512KB二级缓存,同时每四个核心共享8MB三级缓存,那就是总计4MB二级缓存、16MB三级缓存。 http://static.cnbetacdn.com/article/2016/0721/41909f6c436bcef.jpg 模块内还集成了PCI-E 3.0/SATA 6Gbps/10GbE控制器、服务器控制器中心、DDR4内存控制器、安全处理器,然后通过一致性互连总线,与其他模块组成更大规模的产品。 不过很显然,这里展示的是Opteron服务器版本,桌面版显然不会有服务器控制器中心(Server Controller Hub),而且桌面上预计最多也就只有8个核心,那么一致性互联(Conherent Interconnect)也就没必要了。 在服务器上,AMD Zen Opteron处理器将分为三个类型,都有自己的接口: 第一部分代号“Snowy Owl”(雪鸮),4/8个核心,封装接口SP4R2 BGA,面向入门级服务器。 第二部分代号也是“Snoy Owl”,8/12/16个核心,面向中端市场,封装接口SP4 BGA,其实兼容SP4R2但不知道为什么搞出两样来。 第三部分代号“Naples”(那不勒斯),16/24/32个核心,顶级产品,封装接口SP3 Socket。 当然,它们都支持同步多线程技术,最多可提供64个线程。 性能方面,AMD对最核心的IPC(每时钟周期指令数)极为保密,但是有不少内部人士称,Zen是完全有能力和Intel Skylake一较高低的。
AMD Zen内核架构图首曝:32核心64线程
快科技
vivian
6小时47分钟前
AMD Zen全新架构的处理器将在2017年发布,陆续登陆桌面、服务器等市场。不同于当
前推土机架构的双核合一模块,Zen将回归传统独立核心设计,并且有很特殊的组合方
式。此前我们就曾介绍过,Zen处理器的基础模块叫做“Zeppelin”(齐柏林/ZP),今天
我们第一次看到了它的基本架构图:可以清楚地看到,每一个Zeppelin模块都有8个物
理核心(16个线程),每核心512KB二级缓存,同时每四个核心共享8MB三级缓存,那就是
总计4MB二级缓存、16MB三级缓存。
模块内还集成了PCI-E 3.0/SATA 6Gbps/10GbE控制器、服务器控制器中心、DDR4内存控
制器、安全处理器,然后通过一致性互连总线,与其他模块组成更大规模的产品。
不过很显然,这里展示的是Opteron服务器版本,桌面版显然不会有服务器控制器中心(
Server Controller Hub),而且桌面上预计最多也就只有8个核心,那么一致性互联(
Conherent Interconnect)也就没必要了。
在服... 阅读全帖
d****g
发帖数: 1049
31
来自主题: Java版 - 问个多线程的问题。
Thx BulletTooth and coconut.
我现在用join()。似乎运行正常。
可是在不同系统里我的程序表现非常不同。
我在我的XP Pro Sp2环境调试(java 1.5 updated),
程序运行结果是我预期的。
可是我把程序放到Solaris 10环境里,竟然运行
表现根产生死锁类似。程序要等很久才能进行线程运算。
比如说我分三次产生30个线程,每批10个,批间间隔3秒。
我用一个循环产生线程并start(). 设一个计数器到
10个线程都出现然后同时开始计算。全部30个线程产生
之后运行join(). 在我XP环境运行正常,第一批10个
生成以后可以探测到运行,然后是第二和第三批都正常。
可是弄到Solaris下感觉像是第一批产生以后等第二第
三批线程全部生成才大家一起运行计算。如果线程很多
等待要达到1-2分钟左右,就像死锁一样。但运算结果是对的。
不知道是怎么回事。

latch
l*******g
发帖数: 82
32
来自主题: Java版 - 请教一个多线程的问题
public void run() {
while (!done) {
synchronized (lock) { <---你这里加锁,最好放在while外
while (index.get() % threads != id) <---你这里判断条件
try {
lock.wait(); <---你这里是做什么?你如果想要wait(),
你就要有一个地方notify()。一旦你进入这里,你下面的notifyAll是永远都到达不了
的,因为你这个事wait forever!
} catch (Exception e) {
}
System.out.println("The id" + id + ": " + queue[index.get()]
);
if (index.increme... 阅读全帖
e***n
发帖数: 286
33
来自主题: Programming版 - C 多线程的一个问题
终于搞定了, 其实就是定义一个 sub 就行了, 开多个线程调用, 重新把数据结构整理
了一下, 把公用的数据和本线程内局部数据分清楚就行了, 第一次用多线程, 觉得还真
是不错. 我这是个搜索算法, 开 2 个线程后用了个很简单的规则来交换线程间信息,
感觉多线程对搜索算法效率是有所提高, 但是开 3 个线程以上的性能提高就没那么显
著了.
z****e
发帖数: 54598
34
来自主题: Programming版 - 用python写多线程。刘姥姥都笑了
理论上主次线程才有可能冲突
辅线程跟辅线程之间不会有任何冲突
因为key不一样
只有辅线程和主线程才会有争抢lock的问题
但是辅线程一定会在短时间内释放掉lock
没有理由说会堵在那边,因为每一个thread都跟request绑定
除非说主线程堵了,那这个没办法
主线程堵了,你整个游戏也就挂了,重启呗
不过想不出为什么主线程会堵,lock就那么点
辅线程只有在写的时候才需要lock,而且肯定会释放
主线程要堵也就是那么一点的时间,如果运气不好正好遇上的话
实际操作中根本遇不到,android上双线程也是这么操作的
没觉得ui有多堵
a9
发帖数: 21638
35
来自主题: Programming版 - 用volatile退出线程对不对?(C++)
你这是设计有问题。
如果你两个线程都要用数据库连接,那应该各自建一个单独的连接
或者在主线程里建连接,起两个线程,设置quit=true,等两个线程退出,然后断开连接
线程处理本来应该是相对独立的逻辑,你这种处理法用不用线程有什么意义吗

C+
quit
的。
reordering在
线程
变量
w*********s
发帖数: 277
36
【 以下文字转载自 Programming 讨论区 】
发信人: woganmitbbs (我gan买买提), 信区: Programming
标 题: 用多线程怎么比单线程还慢呢?
发信站: BBS 未名空间站 (Sun Nov 14 03:48:38 2010, 美东)
用perl来读一堆文件
1.单线程顺序一个一个的读文件
2.用多线程读多个文件,每个线程读一个文件
光读,没做任何操作。
用time命令看运行时间
结果发现2比1慢好多,咋回事呢?
谢谢!
c*******7
发帖数: 438
37
来自主题: JobHunting版 - 想问一下那道H2O的多线程题
题目是这样的:实现两个函数: H() and O(), 这两个函数会被多线程调用。如果满足
当前2个线程调用H(),和1个线程调用O(),让以上3个线程返回,产生一个水分子(可能
是HHO,HOH,OHH)。调用H()的当前线程不能大于2,调用O()的当前线程不能大于1。
我思前想后,写了一个,请大家帮忙看看。(排版有问题,tab改成下划线了。。。)
(发现前面写的好像不太对,又改了一次)
private Object mutex = new Object;
private Semaphore hSemaphore = new Semaphore(2);
private Semaphore oSemaphore = new Semaphore(1);
private int hCount;
private int oCount;
public void H() {
____hSemaphore.acquire();
____processH();
____
____synchronize(mutex) {
________hCount++;
________if(oCount == 1... 阅读全帖
r**********g
发帖数: 22734
38
来自主题: JobHunting版 - 菜鸟请教多线程怎么学
找个现成的单线程程序改,尽力优化。记得有谁说过学multi-thread五个阶段:第一阶
段发现多线程好用,于是到处都用;第二阶段发现需要lock,到处都synchronize;第
三阶段发现会死锁,会正确用lock;第四阶段进一步减少lock来加快速度;最高境界要
分析到cache,如何分配共享内存以减少隐蔽的false sharing。
要想写得非常好,有很长的路要走,比如多线程读数据,尽可能把数据放在一个内存
block,能够fit进cache line,这样读数据速度快;多线程写数据,则正好相反,最好
每个线程写自己的block,尽量分开不在同一个cache line。即使不是多线程写同一个
address,写同一个block也会造成隐含的false sharing lock,效率低很多。
s****y
发帖数: 503
39
多线程共同扫描,主线程在多线程中启动scan方法,每个线程都有
一个私有的list,每个线程共享一个“results”对象来向主线程报告进度,
成功扫描次数必须精确。请改正和修改scan方法以提高任务性能。
private interface Data {
public boolean scan();
}
public void scan(List list, Properties results) {
synchronized (results) {
Iterator i = list.iterator();
Object lock = new Object();
while (i.hasNext()) {
if (i.next().scan()) {
String key = "scan performed";
synchronized (lock) {
results.setProperty(key, String.valueOf(Integer... 阅读全帖
p****w
发帖数: 90
40
nn【在 sallay (sallay)的大作中提到:】n:多线程共同扫描,主线程在多线程中启
动scan方法,每个线程都有n:一个私有的list,每个线程共享一个“results”对象来
向主线程报告进度,n:成功扫描次数必须精确。请改正和修改scan方法以提高任务性
能。n:n:private interface Data {n: public boolean scan();n:}n……nn--n
[发自未名空间Android客户端]
p******e
发帖数: 528
41
比方说我有一个6核机器,如果打开HT,原则上我可以开12个线程。
可是我发现一般来说超过6个线程后性能提升非常有限。当然这是
正常的。性能的提升不会随所开的线程数增加而线性增加。但是
会不会说虽然HT技术允许我在一个核上多开一个的线程,但是对于
数值计算来讲,这个多出来的线程实际上上还是在同一个核中计算
的,所以它们之间是有一定的竞争的。换句话说,一个六核CPU,
当我开多于6个线程之后,对性能几乎没什么提升。谢谢!
z*******3
发帖数: 13709
42
来自主题: Java版 - 多线程真头疼,但也挺有趣
还有工作流engine和web service这些,也都是多线程搞的
包括ui都有自己的多线程,比如swing的invokelater
javafx的task&service
有jvm的地方就有多线程
包括所谓的单线程,异步和event,其实底层都用到了多线程
但就是说没有必要自己去搞这些底层的多线程api
就算写出来了,后面的人看起来很痛苦
看源代码永远都是很痛苦的一件事
不仅写得好得很少,可读性差,大部分代码写得乱七八糟
而且文档通常也不存在,也不能借用其它公司的工作经验
可维护性变得很差,成本就高了
不过楼主的剧本适用java.util.concurrent
r*g
发帖数: 186
43
来自主题: Linux版 - 求教gdb下多线程调试问题
比如现在有两个线程1和2
设置了set scheduler-locking on
然后线程1会设置某个变量
线程2等待这个变量被设置, 不然就挂起
在线程2中, 单步运行时候 挂起了
这时候如何回到线程1?
此时gdb无法输入任何东西
因为当前线程挂起了 很烦
谢谢各位
f******e
发帖数: 164
44
【 以下文字转载自 Linux 讨论区 】
发信人: francise (小飞猫), 信区: Linux
标 题: 如何GDB调试因pthread_cond_wait()阻塞的线程?
发信站: BBS 未名空间站 (Thu Apr 3 02:08:42 2008)
比如有两个线程1,2,主线程1执行到某处会pthread_cond_wait(),然后由线程2唤醒
,继续执行.
我用gdb调试时却出了问题,调试时主线程执行到pthread_cond_wait()函数处
,进入等待状态,ctrl+c后看到的线程信息如下:
(gdb) info thread
* 3 Thread 1026 (LWP 19165) 0x420292e5 in sigsuspend ()
from /lib/i686/libc.so.6
2 Thread 2049 (LWP 19164) 0x420e0037 in poll () from
/lib/i686/libc.so.6
z****e
发帖数: 54598
45
来自主题: Programming版 - 用python写多线程。刘姥姥都笑了
主次分开嘛
主线程不要被打断就行
其他的thread将state临时放在hashmap里面
然后主线程每次过去轮询并清空
所有的线程都是单向且无循环的
除了主线程,所以可以保证主线程不被打断
其他线程一定不会长期占用lock
根本不存在憋死的问题
是不是lock free,看你怎么实现
还是老话,我们测试无问题,你愿意买,我们就卖
就这么简单,有问题,我们负责解决,你负责掏钱就行
D***n
发帖数: 6804
46
来自主题: Programming版 - 用python写多线程。刘姥姥都笑了
你这样实现的代价比Lock-free岂不是高太多?
你这个实现有很多严重的问题。
主线程和副线程的同步还是lock。某个副线程挂了主线程岂不是在那里干等?
你怎么保证副线程一定不会长期占用lock?你的副线程一个I/O操作都没有?
就算你可以不干等,但是你这么搞已经把那个ConcurrencyHaskMap给废了。
s****y
发帖数: 503
47
该方法要去除list的所有null,因为输入的list非常、非常大,请问如何尽可能地改进
这个方法?
public void removeAllNull(LinkedList f) {
List lock = new ArrayList();
for (int i = 0; i < f.size(); i++) {
synchronized (lock) {
if (f.get(i) == null) {
lock = new ArrayList();
f.remove(i);
}
lock.add(f);
}
}
}
输入:[1, 2, null, 3, null, 4, null, 5, null, 6]
输出:[1, 2, 3, 4, 5, 6]
还有一道题,多线程共同扫描DNA,主线程在多线程中启动scanDNA方法,每个线程都有
一个私有的dnaList,每个线程共享一... 阅读全帖
d*********g
发帖数: 38
48
来自主题: Programming版 - 线程共享变量问题,搞不懂。
谢谢keiutou的例子。咱们就follow这个例子聊一下共享,因为我还不是很明白共享的
含义。
“你有一个process,你需要处理一款很大的数据,你就把这个数据没成四块,然后
create四个thread,每个线程都去计算各自的数据,然后把数据汇总到进程中。这个过
程数据从进程到线程,再由线程回进程,就是一个共享的结果”
你说的共享,我理解是指在内存中同一份“很大的数据”,四个线程可以直接访问,而
不需要将各自需要处理的区块再复制到各自的私有栈中。
由你的例子引开,四个线程换成了由四台主机处理,那么每台主机都需要从“很大的数
据”中复制需要处理的区块到该主机。这样每台主机处理的是自己复制的数据,因此没
有共享这一操作。
不知道以上的理解对不对。我是ee做网络的,多线程和os比较薄弱,这段针对这一块再
补。
k*****u
发帖数: 136
49
来自主题: Programming版 - 线程共享变量问题,搞不懂。
首先,楼主你如果真想转cs 要看操作系统,数据结构与算法,这两个是最最基本的,
如果还能看看计算机体系结构就更好了。楼主的问题如下,
你说的共享,我理解是指在内存中同一份“很大的数据”,四个线程可以直接访问,而
不需要将各自需要处理的区块再复制到各自的私有栈中。
--> 我没有说过copy,可以直接访问,也可以copy过去,现实中为了防止子线程搞乱主
进程的数据,一般是通过一个函数或者方法读取一块特定的数据,当然理论上你可以直
接访问,这就是为什么说线程是共享资源的
说到这里,你应该听过进程之间的独立资源的。
由你的例子引开,四个线程换成了由四台主机处理,那么每台主机都需要从“很大的数
据”中复制需要处理的区块到该主机。这样每台主机处理的是自己复制的数据,因此没
有共享这一操作。
--> 如果变成四个主机(我当时说道的集群只是举例,大规模数据是怎么被分配处理的
)如果变成四个主机,就是四个独立系统了,这时候进程 线程的都是各自系统的,已
经没有什么共享不共享一说。完全就不是一回事。多线程就指在一个系统中。
如果有时间的话,可以到网上听听online的cs课程
b*******g
发帖数: 603
50
傻逼你丫还没完了,你丫可是花了几周才写出一个多线程计数器,几分钟内就被我鉴定
是太监的。又花了一个晚上给你们这些外行解释为什么。
至于单线程,很显然 throughout是最大问题,单线程要是能行你这傻逼折腾多线程干
啥,谁不知道单线程简单。你丫也自己知道没戏尿遁了。
现在来折腾单线程能不能做 transaction,你丫屁眼里生了脑子夹到了吧。
1 2 3 4 5 6 7 8 9 10 下页 末页 (共10页)