D***n 发帖数: 6804 | 1 1)我就知道你有此狡辩,随便找个常数测试一下,立刻就被抓了现行。气急败坏,还
开始扯20年后巨牛逼的机器,哈哈哈哈。这个事情我早就料到了,所以:
2)这个同时也可以测试出来你有没有看过具体代码,你看了自然会发现即便是巨牛逼
机器,设高了也有严重副作用以至于牛逼机器会直接S_B。具体是啥自己去看(家庭作
业)
3)那个concurrency是用来控制hask-linklist的颗粒度以提高并发能力的,如果一个
线程在某个segment拿到锁后suspended/deadlock,其他所有访问资源的其他相关线程
照样无法写入那个segment。Lock-free确保访问特定资源的相关线程每次至少有一个会
make progress。
一个口口声声要人去看文档代码的,原来自己根本就不看,哈哈哈哈哈。 |
|
|
z****e 发帖数: 54598 | 3 应该说fp不反对var
反对var是为了多线程编造出来的谎言
因为pure fp解决不了多线程带来的var冲突
所以只好immutable鸟
这完全没有必要,就跟单线程一样
纯粹浪费 |
|
z****e 发帖数: 54598 | 4 应该说fp不反对var
反对var是为了多线程编造出来的谎言
因为pure fp解决不了多线程带来的var冲突
所以只好immutable鸟
这完全没有必要,就跟单线程一样
纯粹浪费 |
|
n******7 发帖数: 12463 | 5 有几个问题请教:
1. 如何效率地评估java程序的内存消耗和运行时间?
前几天问了java code在不同机器上内存消耗不同的问题。现在测试了不同的Xms Xmx参
数,同样的机器使用16core,16个进程时大致如下.基本上Xms=1/2g,Xmx=6g时内存消耗
最少,也显著比其他参数要快。没有再往下测了。但是这样测试觉得好没效率,有没有
什么自动半自动的方法可以做这个评估的?特别是很多语言benchmark的测试,他们是
怎么评估像java这样语言的速度和内存使用的?
Xms Xmx
16g 112g: cput=11:50:14,mem=30666936kb,vmem=125003524kb,walltime=00:48
:24
16g 48g: cput=11:50:32,mem=28415984kb,vmem=55443888kb,walltime=00:48:
22
16g 40g: cput=11:47:43,mem=25669572kb,vmem=46747780kb,walltime=00:48:
13
16g 32g: cput=11:49:53,mem=... 阅读全帖 |
|
h**********c 发帖数: 4120 | 6 suggest you read Java Performance, written by Oracle engineers.
My thinking is GC should be handled out of the vm box. Single VM should be
stress-tested and the program/task should be able to throttle itself for
memory utilization and persist over usage to database. Use cluster/load
balancer to comprehensively conduct the VMs' symphony by major process
tables' reading or VM status readings -- process threshhold trigger balancer
audit and administration.
Unfortunately, in real life, we rather hav... 阅读全帖 |
|
f*********r 发帖数: 9 | 7 加线程和加进程应该都可以。不同的是,加线程会受限于host的带宽,加进程(假定多
加的进程可以分布在别的host)则受限于hbase的带宽。如果进程只能在一台机上跑,那
加线程和加进程没多大区别。 |
|
k*****u 发帖数: 136 | 8 share的好处就是 high performance
举个例子,如果你的计算机有多个core,比如说四核,那么理论上四个core可以同时进
行计算
你有一个process,你需要处理一款很大的数据,你就把这个数据没成四块,然后
create四个thread,每个线程都去计算各自的数据,然后把数据汇总到进程中。这个过
程数据从进程到线程,再由线程回进程,就是一个共享的结果
当然share的好处不局限于此
如果是自己的pc也许只有四核 八核,如果是集群可能就是几十核,几百核,有很多高
性能的技术比如openmp(shared memory) openmpi(message passing) hadoop(
mapreduce) 都是类似的进行计算,大同小异
敢问一句,楼主开始cs的东西多久了? 说说你的打算,比起技术上的细节,最重要的
学习的方法 |
|
b***i 发帖数: 3043 | 9 纠正了:先描述一下树:
一个多叶子的树,每个节点有多个下层节点。每一个节点也有一个指针指向同层下一个
节点。这个图无法看,可以复制到notepad上看
1--2--3--4
| | | |
| | | 5
| | | |
| | | 6
| | |
| | 7--8
| | |
| | 9
| | |
| | A
| |
| B--C--D
| | |
| | E
| |
| F--G
| |
| H
|
I--J--K--L
如果要遍历1-2-3-4-5-6-7-8-9-A-B-C-D-E-F-G-H-I-J-K-L,并且进行处理则有如下程序
traverse(head){
if (head->needed){
action(head);
wait(50);
if (quit) return;
if (head->deeper)
traverse(head->de... 阅读全帖 |
|
d***a 发帖数: 13752 | 10 是的。不同的进程,打开不同的文件,本可以不上锁的(看楼主说的应该是这样)。现
在楼主的写法,一个线程(共享内存的多线程)用write_to_file()打开文件1, 另一个
线程就不能用write_to_file()打开文件2了。 |
|
b***i 发帖数: 3043 | 11 主要是Java,也可以应用在其他语言:
我自己定义一个线程的类,然后定义一些实例,这些实例有些基本的变量的值是不同的
,比如
public class MyThread extends Runnable{
int id;
public void setID(int idd){id=idd;}
public void setFunction(DifferentClass dc);
...
public void run(){
dc.dosomething();
}
}
然后我想在dc.dosomething这个函数里面取得呼叫它的线程的信息:id,除了在run里
面吧这个传入dc.dosomething(id)外,还有什么别的办法?
我问这个主要因为这个程序的调用已经有几百个函数这么写了。要改还有点麻烦,也不
确定我就能全部搞定。怎么简单点可以把线程的基本信息告诉非常深入的子程序呢? |
|
b***i 发帖数: 3043 | 12 看了一下,似乎这个就是我最终想要的。
就是说,在我自己实现了Runnable的类里面定义一个static变量
class MyThread implements Runnable{
ThreadLocal myControl...
public void run(){
call other class, other functions
}
...
}
class Other {
public void dosomething(){// without passing in any parameter
MyThread.myControl...就可以访问该线程所拥有的那个Control,而不是所有线程
共有一个。
虽然在语法上是static变量,但是其实是线程相关的。当然,也可能需要通过函数访
问,不是直接访问这个变量。
} |
|
c*****m 发帖数: 1160 | 13
够不够用,也应该能够在线程切换的时候,把一半时间换给另外的线程啊。这难道不是
标准的“操作系统”的例子?
为什么这个cpu是”假i7"? 业界上对这个cpu有什么特别的评价么?
用过8核的机器跑,程序是没有问题的,多线程能够节省时间。 |
|
b****u 发帖数: 1130 | 14 以前用Java,各种多线程用的特别多,因为处理大量的数据。
现在用Python,据说那个多线程就是个骗子。
大家用Python一般是如何搞多线程的? |
|
|
m******9 发帖数: 968 | 16 问题是这样的,多线程中典型的模型就是:
对于某个thread p1
Wait(lock)
// enter critical section
Signal(lock)
比如 lock就是一个mutex,当p1获得了这个lock以后,它进入critical section,工作
完了,就释放lock
他的问题就是:
如果用一个普通的global variable:
global boolean lock = false;
进行如下的操作
thread p1
step 1: 获得lock
step 2: lock = true;
step 3: // enter critical section
step 4: 释放lock ( lock reset to false)
假设step 1和step2 是不能被中断的(atomic),任何thread在进入critical section
之前,都要检查global boolean lock。那这种利用global variable的方法能不能达到
线程安全的目的? |
|
m******9 发帖数: 968 | 17 能不能具体解释一下“不安全”主要体现在什么方面呢?
还有我仔细想了想,race condition也真的没有回答他的问题,race condition是出现
在多线程争抢lock的时候,一旦某个线程获得了lock,它就不能被打断,按照他的假设
似乎也是安全。 |
|
r****o 发帖数: 1950 | 18 我知道的是:
同一个进程内的线程之间可以通过共享内存通信,
不同进程的线程之间,或者不同进程之间可以通过管道,信号量,socket等来通信。 |
|
g**e 发帖数: 6127 | 19 列几个我被问的题吧,没面过google。银行码工多线程问的很多。概念性的就不列了,
比如什么是deadlock, livelock,怎么预防,怎么解锁之类的。基本上都是java的问题
1. write a method to transfer funds between two bank accounts
2. what's synchronized keyword in java? how does it work? what's the
difference between sychronize keyword and other high end locks in java.util.
concurrent package?
3. what's the best way to stop a thread and why?
4. what's the difference between daemon thread and regular thread?
5. implement your own ReentrantLock class.
6. should we always u... 阅读全帖 |
|
a**U 发帖数: 115 | 20 一个queue,一个consumer,一个producer,一般的方法是这个consumer,和producer
分别是一个线程,然后有一个锁,这连个线程风别访问这个queue。
问题是:如果这个queue是空的,如果用上面的方法,这个consumer还是定期查看queue
。有没有一个方法,不这么做,让这个queue里一旦有东西然后触发这个consumer
thread运行?如果做。请有经验的大人指点。 |
|
A*****t 发帖数: 275 | 21 多线程去wiki看下什么意思就可以了,一般面试不会具体让你写多线程的程序的。
实际工作中用到,但是不多。 |
|
g*****g 发帖数: 34805 | 22 最简单就是返回一列Future,call get block在上面,其他常见的办法有 countdown
latch. join 是错误的,完成的是 task. 线程池还要继续跑。 |
|
e***a 发帖数: 1661 | 23 多线程算法 比 刷题网站上的单线程算法 难很多。
想请教 应该看哪几本书? |
|
h*****e 发帖数: 14 | 24 问一道多线程面试题: 设计一个类似于黑名单的服务。 每个用户每次请求一个服务都
会记录ID。每个用户只能在固定的时间内请求固定次数的服务, 比如说1分钟之内只能
请求10次。如果请求服务的次数大于10次,就会被加入黑名单而且在5分钟之内不会得
到任何服务。并且, 如果用户在这个5分钟之内仍然发送请求, 则重新计算这个5分钟。
还需要实现一个方法能随时返回在当前时间间隔内10个访问次数最多的用户,时间间隔
是10分钟。就是说每隔10分钟就把所有的访问次数重新记0。
没做过多线程的东西, 不知道用什么样的数据结构来实现共享, 并线保重性能。
请各位大神赐教啊! |
|
h*****e 发帖数: 14 | 25
嗯, 但线程还是比较简单。 主要就是不知道变成多线程之后怎么么处理共享的数据。 |
|
k****i 发帖数: 128 | 26 【 以下文字转载自 Programming 讨论区 】
发信人: kazumi (忍者), 信区: Programming
标 题: 问大牛个java线程机器数的估算
发信站: BBS 未名空间站 (Wed Oct 7 23:46:18 2015, 美东)
200个client,每个client同时400个tcp连接,用24core的机器java线程模拟并发连接
数多少机器够用? |
|
g*******d 发帖数: 495 | 27 也不是完完全全不会,对方问的应该不算多线程难题,应该说在多线程问题里算简单的
,但是我的回答肯定是磕磕绊绊,然后有些地方要对方修正或者提示。总之不理想吧 |
|
D***0 发帖数: 138 | 28 【 以下文字转载自 Java 讨论区 】
发信人: DK100 (dark knight), 信区: Java
标 题: java多线程问题请教
发信站: BBS 未名空间站 (Tue Jan 5 12:34:03 2016, 美东)
操作比较简单,就是有个cache,当cache miss时从数据库取值,同时更新cache。这里
的key是由两部分组成的,一个int和一个interface,函数输入是这两个。问题是在多
线程下如何synchronize。 我想是用concurrentHashMap当cache
Type是一个interface
一开始想用下面这个Key来做map的key,但是后来觉得不对,这也是想请教的一个地方
class Key {
public int a;
public Type t;
public Key(int a, Type t){...}
public int hashCode() {...}
public boolean equals(Key k) {... }
}
List f(int a, Type t) {
... 阅读全帖 |
|
l********e 发帖数: 103 | 29 多谢各位指点
我面试的时候 面试官 说写是用mutex, read不用lock...
不过 大家讨论后 我觉得这肯定不对
看了好几处CAS的介绍 都是说要update的时候 先和原来的值比较 如果相同则update
不过 没有说会不会影响 只读的线程
我想确认一下 CAS , RCU这种atomic的命令都是 在all pre-existing read-side
critical sections complete后 锁住bus,然后才update的吧?
不然读的线程 就都读出乱码了
我的理解对吗?
谢谢 |
|
发帖数: 1 | 30 我看了看RCU,哥们你真是胆子大,居然敢在面试的时候拿这个出来,
However,RCU does not have any write side primitive which looks traditional
write lock. That is, their update side primitives need other locks to keep
threads safe.
http://www.cs.nyu.edu/~lerner/spring11/proj_rcu.pdf page 6 & 7
就是说,RCU只允许一个写线程,一个一个地写。如果有多于一个的写线程,必须要使
用另外的锁进行同步。具体的source code这个slide里面都有。
所以RCU依赖于其他的resource锁定方式,根本不可能是lock free的。我一直说,有些
theoretical junk是依赖于unreal的假设,根本不实用。
"
我一直强调的是绝对不可以在hashtable的设计(尤其在面试的时候)用copy-on-write,
一定要用lock。
第一点:最基本的常识,只能有... 阅读全帖 |
|
C*****5 发帖数: 8812 | 31 【 以下文字转载自 Hardware 讨论区 】
发信人: pathdream (求包养买保10洁), 信区: Hardware
标 题: 16核心32线程!AMD Ryzen发烧版曝光:Intel彻底慌了
发信站: BBS 未名空间站 (Sun Mar 19 16:48:55 2017, 美东)
16核心32线程!AMD Ryzen发烧版曝光:Intel彻底慌了 |
|
i*****n 发帖数: 3168 | 32 其实就算自己不多线程,也难保对方不多线程
总之不到扯证那天,还真说不好会发生什么,这个世道太变幻莫测了。 |
|
x**y 发帖数: 10012 | 33 一个cpu的话
你就得考虑线程建立和终止的开销了
因为只有一个cpu
多线程没有特别大价值 |
|
w*********l 发帖数: 1337 | 34 如果你是单cpu,而且你的workload是cpu-bound(就是基本没有i/o),那多线程一定会
慢。慢多少就要看系统管理线程的开销有多少了。
p.s. 你这个code贴得太烂,格式都没了,没人有心思看。 |
|
h**********c 发帖数: 4120 | 35 贴的code,行首的空格和tab都被吃了回扣了,
不过visual studio下把code, CTRL-K,CTRL-F很容易就从新FORMAT
根据liuhulan 同志介绍的MSDN上, KEN KERR的文章,
对单线程做了一些改动,主要还是基于LOCALITY的思想:
1. 不在SUBROUTINE 中使用NEW, DELETE,能不用DYNAMIC MEMALLOC尽量不用,坚决不要
在循环体中使用.
基于这一点,原来单线程900秒,提高到300秒!!
2. 所有SUBROUTINE 改成INLINE,300->287秒.
3. 在循环体内不进行console print,影响不大.
因为我把程序改成把要输出的结果存到一个array,并且要一个counter,因此会有race
condition,需要cs or mutex. multithreading 测试待续. |
|
b***i 发帖数: 3043 | 36 巨型机 我做过,48个核心,可以快30倍以上。
而且巨型机内存巨大。
你看看那一部分可以分开,然后直接组合。比如你可以把table1分成48组,一个线程算
table1的一组和table2的结果,然后直接合并不就行了。
虽然你算得不是乘法,但是分成线程的原则是一样的。
5000
1
[i |
|
r********3 发帖数: 2998 | 37 你开144个线程不就行了?
现在的操作系统都能够合理调度并行的线程到不同的core上。 |
|
r******e 发帖数: 617 | 38 使用这个函数pthread_setaffinity_np()可以将线程绑定在你想要运行的核上
你可以给每个线程显式地绑定在每个核上。但这个方法可能不是最好的方法。最好
是让操作系统来调度
. |
|
t******8 发帖数: 2803 | 39 我编的一个MATLAB程序没有考虑parallel computing。在i7-860(4核8线程),Win7下
面MATLAB2009a运行,只占
用13%的CPU。也就是说MATLAB2009a似乎把i7-860当成了一个8核CPU。请问如何才能让
它充分利用整个核
(25%)?需要改环境参数?怎么改?
我暂时的解决之道是在这台Win7机器下开5个MATLAB窗口,跑5个这样的程序(留3个线
程上网灌水看电影……),分别
占用13% CPU,每个任务的速度降低50%左右。如果这样也凑合。
实验室还有一台MacPro,用的是i7-920的xeon版本,也是4核8线程。运行一个任务速度
比Win7机器快,但是Mac OS
10.5下好像只能开一个MATLAB窗口,CPU占用率也只有13%,请问有什么方法能同时运行
多个MATLAB任务? |
|
c*m 发帖数: 1114 | 40 这个很奇怪,intel网站上也是这个说法,基本就是在multi-thread application情况下
能充分利用cpu能力。不过没有提single-thread的application情况。
如果对单线程程序也一样,那HT对于所有单线程的application 处理能力都下降一半?
这个感觉好不合理。 |
|
t**t 发帖数: 27760 | 41 再推荐两款
Xeon L3406 30W 2核4线程
Xeon L3426 45W 4核8线程
都可以用在H55主板上。 |
|
t****g 发帖数: 35582 | 42 笔记本的i7才有双核的。
台机的960以下都是四核8线程,970以上都是6核12线程。 |
|
c*******h 发帖数: 107 | 43 俺的一个程序用i7跑4线程的话19.6分钟,8线程17分钟 |
|
l*********s 发帖数: 5409 | 44 【 以下文字转载自 Programming 讨论区 】
发信人: littlebirds (dreamer), 信区: Programming
标 题: win 7 pro 正常情况多少进程/线程?
发信站: BBS 未名空间站 (Fri Dec 12 22:03:49 2014, 美东)
新机器60个进程,1000个线程正常吗? |
|
h****r 发帖数: 258 | 45 经过多年研究,程序员发现,人们广泛关注的性爱行为就是一个多线程问题,在这个
专题中,我们将讨论性爱行为优先级、同步、死锁、挂起、恢复、中止及通信问题。
首先我们来创建两个线程
class makelove implements Runnable {
Thread t;
makelove() {
//Create a new Thread of makelove
t = new Thread(this,"make love");
t.start();
}
public void run() throws
过程中突然阳痿Exception,女人突然来了大姨妈Exception,有人敲门Exception,电话响了
Exception,地震Exception {
try {
while((男人兴奋想做了||女人淫荡想做了)&&身体情况允许){
前奏;
开始做;
结束;
Thread.sleep(合适时间)
|
|
d****g 发帖数: 1049 | 46 是不是每个线程都会分配一个独立的文件指针?
还是所有线程共用一个指针? |
|
d****g 发帖数: 1049 | 47 那我在一个线程里定位一个记录不是会影响另一个线程
的状态? |
|
c*****t 发帖数: 1879 | 48 你可以让子线程 wait 在一个 lock 上。thread pool 有 add thread / remove
thread (called by the 孙线程,在结束的时候)。当 thread pool 的 size
是 0 的时候,notifyAll 这个 lock 。 |
|
g*****g 发帖数: 34805 | 49 找到这个类,CountDownLatch,会维护一个counter,似乎比较方便。
只要孙线程结束前countdown,到0就会产生一个Interruption唤醒子线程。 |
|
a****i 发帖数: 1182 | 50 一个想法是把queue分块,比方说线程一处理0到9,线程二处理10到19
或者用Hibernate直接saveorupdate 不知道行不行 |
|