a****l 发帖数: 8211 | 1 Not only will multi-threading not increase the reading speed of a file, most
probably it would actually slow down the speed and at the same time is
murdering the hard drive. Good luck.
一个,单线程和多线程能达到的速度已经被瓶颈了。 |
|
|
b***i 发帖数: 3043 | 3 我想按下按钮的时候开始这个线程,需要用thread什么吧。这个时候,线程开始运行或
者准备运行了,我再按按钮,就不让新开一个。怎么禁止新开一个? |
|
q*********u 发帖数: 280 | 4 其实是有这方面的应用的,比如
synchronized(this){
...
}
这种代码出现频率很高的。
看来如果是thread对象, 猜测那么jvm有这个特性,当线程结束,线程自己会自动
notify了
very interesting. since spurious wakeups are always allowed for wait(), it
is not wrong that JVM decides to wake it up upon thread termination. this
cannot be a useful feature, nobody should sync on a thread object like you
did. probably for some historic reasons. |
|
g*****g 发帖数: 34805 | 5 写框架.写从Server Socket开始实现的Server,或者基于Async IO的类库,如Netty
,Ning Async HttpClient等的server。这种活一般而言新手是没有机会接触的。
Swing之类的也有一些,大多比较简单,就是2-3个线程同步。
大部分Java工作需要一点多线程的知识,但是在框架之下,需要直接写的不多。
至于什么公司招这种人。主要还是大公司,比如苹果做icloud就很缺这方面的人,有朋
友说一直找不到合适的。你可以去看他们的广告。 |
|
T*********g 发帖数: 496 | 6 我经常问cobditiob的实现。怎么发现和避免死锁,为什么需要线城池,怎么实现的。
java 下能主动中断一个线程吗,解释java这样设计的原因等等。java多线程是个很大
的topic,很多可以问。 |
|
r******r 发帖数: 700 | 7 是啊。多线程程序,试了一下,在 eclipse 里 debug,好像也与单线程不一样,不太
好 track 逻辑。 |
|
p*****2 发帖数: 21240 | 8
大牛能不能比较一下多线程和异步编程呢?多线程有什么优势? |
|
l*****o 发帖数: 473 | 9 我试着对楼主的方法进行点评一下,好像还有许多地方是可以提高的。
《《(1)将原来的逐行读取,逐行处理,改为先将每个文件的所有行读到一个新建的
DataStore 中。
这步是可以用memory mapped file进行提高的。如果单线程读取所有的文件,那么这部
分工作就变成串行化了。
《《(4)现在由于多线程异步处理,直接输出无法保证顺序。就先把这部分信息存储
到一个新建的 map 中,保存记录 ID -> data 的映射。当一个文件处理完了,才最后
按 ID 从map 有序输出到 XML 中。
为了保证顺序,其实还有其它方式可以处理的。比如,我们可以输出到不同文件中,最
后用脚本把所有东西重新拼成一个新的文件。 |
|
z*******3 发帖数: 13709 | 10 异步编程大多数时候底层就是多线程
别人帮你处理了多线程而已 |
|
r******r 发帖数: 700 | 11 如想练练 hadoop,有什么好的 tutorial 没有?不过,这个具体任务确实用不上。这个
4G 的数据,还是很少。这个工具就像一个 utility, 虽然代码有 4000 多行。
多线程还是要好好掌握吧?因为很多地方需要用多线程,并不只是因为数据量大了。 |
|
z*******3 发帖数: 13709 | 12 你用java做任何东西,脑子里首先想到的是用现成的各种工具
框架容器数据存储等,然后才是自己动手去写,除非上头有要求
比如涉及到政府的一些机密系统,需要100%读懂源代码
但是大多数时候,都不用你亲力亲为
当然多线程是一个概念
学过java的都学过这一章,作为基本功,要掌握
但是工作中,能避开就避开,一般都交给各种现成的工具
所谓不要重复造轮子
你这种用hadoop就好了,如果精度要求高,用db
db用postgresql,hadoop就有nosql,现在这两个都是文艺青年用的
公孙大神说的
server,文艺点用spring+tomcat,学术点用jboss
这个主要是event
event vs thread那个event,生命周期交给tomcat/jboss这些去管理
如果你真想用thread,从启动到销毁,那就用akka
这些是新的选择,而concurrent那个包主要是针对旧的legacy code做优化用的
因为把旧的代码全部换成akka这些,成本很高,未必值得去做
所以不同的剧本适用不同的工具,包括rmi这些
其实这些底层都是多线程,作为概念你要理解,但是自己去写
我觉得... 阅读全帖 |
|
c*m 发帖数: 836 | 13 这个对初学者来说的确很常见。其实常用的OS都支持I/O多线程。如果不想用多线程,
Java还可以用NIO的nonblocking stream。
还有一种隐藏的I/O congestion就是平时没事,一旦出错,因为很多log level都是设
成error, 出错的时候才输出,突然增加大量的I/O请求,像雪崩一样,形成正反馈,结
果一个不是很严重的错误就引发系统崩溃。这个情况如果没经验的话,调试的时候经常
想不到,到prod出现一次才意识到。 |
|
p*****3 发帖数: 488 | 14 看不懂程序,能说说这段程序的目的吗。感觉有点乱七八糟的。抛个砖头,等zhaoce和
二爷
只读为啥要多线程,构造函数咋啥都传进来了,AtomicInteger 不需要volatile修饰吧
,thread创建了咋没东西track,lock.wait后没有double check precondition,为啥要
swallow exception, 为啥要sleep,是不是可以用executionService
可以等都执行完了退出,比如像这样设置个done, 中断可以发interrupt, 线程要加判
断和处理interrupt的逻辑 |
|
p*****2 发帖数: 21240 | 15 有时间折腾多线程是不是还不如学点别的?比如STM,AKKA这些。多线程看看理论是不
是就可以了? |
|
d****i 发帖数: 4809 | 16 Java的多线程和OS Native thread的多线程还是很不一样的。就像不同的OS, Win32
thread和pthread也完全不一样,然后Win32和pthread和RTOS上的thread(task)也完全
不一样,虽然概念上总是有些相通之处。 |
|
p*****3 发帖数: 488 | 17
java的多线程也是建立在OS上吧,比如说如果在windows上跑,最后总是会调用win32
API, 还是说java有什么牛逼的能自己实现一套多线程的东西 |
|
l******y 发帖数: 182 | 18 您的意思是不是这样:
在第2种情况,main运行到count.minus()被阻塞。所以剩下的for loop都运行不了了。
然后程序就永远阻塞在这里了。
如果是1,main始终可以运行。阻塞问题只是发生在threadpool里的线程。所以程序始
终可以把for loop运行完。线程里的阻塞最后也就会解决。
不知道我的理解对不对?谢谢! |
|
M********u 发帖数: 42 | 19 如果是简单的for loop,就用openmp包在loop外。如果logic比较复杂,需要手动
create thread。没有一个简单的办法把一个单线程的程序改成多线程的 |
|
a***g 发帖数: 70 | 20 上次发问的时候其实并没有找到问题,现在已经把问题 narrow down 了,具体是
1 程序以 root 身份启动
2 提高优先级 (nice 一个负值)
3 seteuid 将 effective user id 换成非 root
4 pthread_create() <==== core dump
在第4步的时候出现了 core dump。
如果把第2步的nice去掉(即不提高进程的优先级),则没有问题。
如果把第3步的seteuid去掉 (即不换用户),也没有问题。
但是我要做的是:程序必须以root启动,尽量提高优先级好让以后创建的线程也有
高优先级,但是创建的线程不能有 root 权限。
上述 1-4 步在 linux 上没有问题, 在 AIX 5.1, 5.2 也没有问题,结果在
AIX 5.3 上就会 core dump, 实在是搞不清楚为什么,请大侠指点 ...
多谢了! |
|
x****u 发帖数: 44466 | 21 任何多线程的问题都找相应的多线程模板套用,千万不要自己独创轮子。这样地球就清
静了。 |
|
g*********s 发帖数: 1782 | 22 比如十个线程同时读一个文件,系统的调度开销还有运行时间,和这些线程分别读同一
个文件的十个副本相比如何?
另外Unix的并发读是不是没有上限? |
|
l*********s 发帖数: 5409 | 23 for htmlpage in soaps:
result_list=result_list+scrapper(htmlpage).run()
这段代码是用来从网上收集表格信息加以汇总的,我想用线程来加快执行速度,所以把
原来的文本提取部分放到线程子类scrapper里面了,但是感觉不太对,这样作还是顺序
执行? |
|
c*****z 发帖数: 182 | 24 正在复习多线程的sleeping barber问题,
wiki上给的答案,barber的线程如下:
while(true) { //runs in an infinite loop
P(Customers) //tries to acquire a customer - if none is available he goes
to sleep
P(accessSeats) //at this time he has been awakened - want to modify the
number of available seats
NumberOfFreeSeats++ //one chair gets free
V(Barber) //the barber is ready to cut
V(accessSeats) //we don't need the lock on the chairs anymore
//here the barber is cutting hair
}
其他背景信息可以在wiki上找到,我的问题是,V(Barbe |
|
g******e 发帖数: 998 | 25 我也不知道,探讨一下啊 -
C#多线程写mysql应该没问题吧,问题应该是mysql端,如果你的多线程都要lock table
,速度也许不会快多少。 |
|
c****f 发帖数: 1102 | 26 mysql看存储引擎 表级锁的话..多线程也没意义 写入就锁表
行级锁的话 比如innodb 应该可以多线程写入 |
|
e******r 发帖数: 623 | 27 谢谢。我想过用pthread_join,但是好像要分头去join每一个我create出来的线程,比
较麻烦。但是看来没有什么更简单的了。肉包已发。 |
|
T*****9 发帖数: 2484 | 28 直接建一个线程号数组就行了呗
一个for loop全部join |
|
x****u 发帖数: 44466 | 29 比如我还有几个线程也在操作global,那么这个优化就严重影响语义了。两个线程一读
一写一个global的int的话,锁是不必要的。
gcc优化掉赋值也许是因为它发现global没被其它程序所引用。
optim |
|
x****u 发帖数: 44466 | 30 OK。那我就把这个问题简化一下了。
书写C/C++多线程程序时,如果定义了多线程共享的全局变量,是否一定要加上
volatile修饰符以保证gcc不在极端的情况下对其优化。
你认为有必要吗?
volati
still
not
optimizatio |
|
x****u 发帖数: 44466 | 31 一般的说法是C不保证线程安全,关于C优化还可以破坏多线程global语义,而且至今也
没找到明确依据(你那个是C++的),这个语法中没有明确定义的东西多了去了。
乱序是另一个话题了。。。用atomic代替volatile是不行的,锁不能乱用。
/C
intrinsic |
|
p***o 发帖数: 1252 | 32 单线程语义 is well defined.
There is no such thing called 多线程语义, especially for multiple variables. |
|
z****e 发帖数: 2024 | 33 我怎么觉得很多情况多线程都比单线程慢呢?
我是能不加互斥锁就不加,
而且也没有busy waiting。
看见两个cpu100%工作,结果,还是比一个cpu100%要慢,或者想当。
这种为什么? |
|
z****e 发帖数: 2024 | 34 那个run就是线程启动的函数。
thread 对象,必须要一个heap上面的指针,
就是这句话。
exe.execute(new events(p, &oprand::cal2) );
我也不知道,这个stack上边的exe,怎么操作heap上的指针的。
因为多数情况,当main()退出的时候,其他线程还没完事。
我就奇怪,这个stack上的exe thread对象,main结束的时候,不是已经玩完了么?怎
么还能顺利的销毁它持有的heap指针呢? |
|
p***o 发帖数: 1252 | 35 那个execute函数会创建一个线程吗?如果是,你得把这个时间刨掉。
一般来说要避免频繁创建/销毁线程。通常都搞个thread pool,然后
把要执行的函数传过去。 |
|
z****e 发帖数: 2024 | 36 我就是单线程用的那个f。
觉得多线程这玩意还真难搞得很精通。 |
|
|
b******n 发帖数: 592 | 38 intel 是用HT, AMD也使用类似的技术,我不知道你小河个新片的具体代号
intel的Sandy Bridge支持256-bit的SIMD,如果你的程序大量的矩阵运算,那部分可能
会有50%的性能提高。对于多线程,在内存绝对优化的状态下,多核的优势大。如果同等
级的cpu比较,intel绝对是胜于AMD的。
网上有很多的benchmark可以查。
我记得跟内存也有关系,如果全部内存曹都适用,内存速度只能有2/3。。
多线程相对独立,24听起来比16好一些。。不过估计throughput差不多,可能省电一些 |
|
f******y 发帖数: 2971 | 39 C++里面多线程的库有好几个:
(1) pthread
(2) boost, 这个其实是pthread的wrapper
(3) tbb
(4) c++0x 也支持一些基本的多线程编程
我现在正在想该学哪一个,个人觉得tbb的功能最强大,c++0x的好处是它是包含在stl
里的,
compiler的支持应该比较好。
各位老手能指点一下这几个库哪个比较好吗? |
|
z****e 发帖数: 54598 | 40 比如r这种单线程的程序,我尝试了一下用多线程并发
结果马上出问题,100个并发就不行了
我现在的想法是,用一个singleton包装后访问,每台服务器放一个r
然后每台的weblogic都用这个singleton访问,加上synchronized关键字
以控制访问次数和并发的数量否则会出问题,有谁搞过java中调用r的经验没? |
|
xt 发帖数: 17532 | 41 对VC不熟,现在有个问题,就是
如何实现线程的wait-notify过程?
还有如何能够join线程?posix有join的
function,VC好像没有啊 |
|
|
C***y 发帖数: 2546 | 43 一个子线程是没必要,我猜楼主是要起多个子线程吧 |
|
x**n 发帖数: 1055 | 44 我有两个windows下的DLL,
一个是Code::blocks加上MingW 4.3.3 编译的DLL
另一个是Visual C++ 2005编译的DLL
都是差分程序,因此想通过类似boost.thread的实现线程同步并且传递数据
因为是不同编译器生成的DLL,所以想问问有没有这个可能实现这两个不同编译器生成
的DLL线程的同步?
因为两个DLL都依赖很多库,所以想要都用同一个编译器去编译(比如都用Visual C++或
者都用MingW编译成功)太困难了
谢谢! |
|
b***i 发帖数: 3043 | 45 我来说说我的理解吧,是不是你想做的
t_msvc线程:
for(t=0;t
{
这里传递这一步需要的信息给t_mingw;
等待同步信号;
t_msvc自己的计算...
}
t_mingw线程:
for(t=0;t
{
这里传递这一步需要的信息给t_msvc;
等待同步信号;
t_mingw自己的计算...
} |
|
h**i 发帖数: 712 | 46 一个快线程需要从共享内存读一个慢的线程写的数据,为了保证不读重复的数据,是不
是用信号比message queue快? |
|
p******e 发帖数: 528 | 47 比方说我有个一个并行程序,同时还有一个全局变量。如果多个线程都需要访问
同一个全局变量,会不会说由于多个线程都申请访问同一个内存地址而造成互相
竞争的情况呢?谢谢! |
|
n******t 发帖数: 4406 | 48 C++写多线程,就是需要用C写多线程完全没问题的能力+有折腾语言的耐心。
这种人,就我所知,千里挑一。 |
|
c****3 发帖数: 10787 | 49 因为是多线程,网络程序吗。Windows的线程模式和网络编程和Linux里面很不一样。纯
BSD的scoket或者posix API,在Windows下都工作的很差,有很多限制。必须用Windows
Native API才能工作的好。
所以基本上跨平台的程序,在Linux运行好,到Windows里就会运行很差。两边都运行好
,基本要做两套,为两种系统分别优化,很费时间。所以极少两边都能运行好的,尤其
是服务器类需要高性能的网络程序。 |
|
c****3 发帖数: 10787 | 50 还有一点,Windows的创建个进程时间都是重量级的,线程是轻量级的,Windows内核直
接调度线程,不是进程。
Linux进程创建开销还是挺小的,有个ftp服务器叫vsftpd,一个连接fork两个进程,在
Linux下搞几千个连接没有任何问题,在Windows里这么用直接就崩了。所以Linux程序
凡是直接port到Windows的,都性能极差,这倒不是因为Windows差,而是两者差别太大。 |
|