由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 多线程有什么优化的方法?
相关主题
Java 多线程:还需要好CPU?如果一个core,多线程还有必要吗?
重复利用threads的问题问个题
pthread and C++android上有没有CADisplayLink一样的方法?
多线程编程前景如何?拜托推荐多线程和socket的书
c++下如何实现多线程?多线程/进程并发读文件有无开销问题?
用多线程怎么比单线程还慢呢?多线程下的gdb core dump问题
写thread safe程序现在也是程序员必须要掌握的了吧[合集] 问个多线程的问题
Java的服务器一般运行几个线程比较合适?怎样提高C#计算程序的performance?
相关话题的讨论汇总
话题: include话题: zthread话题: void话题: int话题: flag1
进入Programming版参与讨论
1 (共1页)
z****e
发帖数: 2024
1
我怎么觉得很多情况多线程都比单线程慢呢?
我是能不加互斥锁就不加,
而且也没有busy waiting。
看见两个cpu100%工作,结果,还是比一个cpu100%要慢,或者想当。
这种为什么?
p***o
发帖数: 1252
2
many reasons, just post your code

【在 z****e 的大作中提到】
: 我怎么觉得很多情况多线程都比单线程慢呢?
: 我是能不加互斥锁就不加,
: 而且也没有busy waiting。
: 看见两个cpu100%工作,结果,还是比一个cpu100%要慢,或者想当。
: 这种为什么?

z****e
发帖数: 2024
3
我用了个Zthread库,不是很主流的。
#include
#include
#include
#include
#include
#include "zthread/Condition.h"
#include "zthread/Mutex.h"
#include "zthread/Guard.h"
#include "zthread/ThreadedExecutor.h"
using namespace ZThread;
using namespace std;
const int M=1E8;
class oprand{
public:
oprand():c(lock),n1(0),n2(0),flag1(0),flag2(0){}
void cal1(){
for(n1=1 ;n1<1E8;n1=n1+n1%3)
flag1=1;
c.signal();
}
void cal2(){
for(

【在 p***o 的大作中提到】
: many reasons, just post your code
a****l
发帖数: 8211
4
just a wild guess: compiler optimization.

【在 z****e 的大作中提到】
: 我用了个Zthread库,不是很主流的。
: #include
: #include
: #include
: #include
: #include
: #include "zthread/Condition.h"
: #include "zthread/Mutex.h"
: #include "zthread/Guard.h"
: #include "zthread/ThreadedExecutor.h"

p***o
发帖数: 1252
5
1 cal1 里少了个分号。
2 开了优化再说。100M个循环要不了1s。
3 你就同步了一次,多线程不应该慢。

【在 z****e 的大作中提到】
: 我用了个Zthread库,不是很主流的。
: #include
: #include
: #include
: #include
: #include
: #include "zthread/Condition.h"
: #include "zthread/Mutex.h"
: #include "zthread/Guard.h"
: #include "zthread/ThreadedExecutor.h"

z****e
发帖数: 2024
6
分别用-O0,-O1,-O2,-O3,都没有太大效果。
最多有个10%的变化。还是单线程那个快不少。
另外,那个分号加上去了,不影响结果。
-O3下的结果:
3.22 seconds,双线程
2.41 seconds,单线程。
我是明明看见双线程时候,两个cpu100%,然后一个还维持在100%,另一个掉下来。对,我就同步了一次,在双线程的时候。

【在 p***o 的大作中提到】
: 1 cal1 里少了个分号。
: 2 开了优化再说。100M个循环要不了1s。
: 3 你就同步了一次,多线程不应该慢。

z****e
发帖数: 2024
7
那个run就是线程启动的函数。
thread 对象,必须要一个heap上面的指针,
就是这句话。
exe.execute(new events(p, &oprand::cal2) );
我也不知道,这个stack上边的exe,怎么操作heap上的指针的。
因为多数情况,当main()退出的时候,其他线程还没完事。
我就奇怪,这个stack上的exe thread对象,main结束的时候,不是已经玩完了么?怎
么还能顺利的销毁它持有的heap指针呢?
p***o
发帖数: 1252
8
你把cal0里的signal去掉,然后把cal0后面的see也去掉,看看啥结果。

对,我就同步了一次,在双线程的时候。

【在 z****e 的大作中提到】
: 分别用-O0,-O1,-O2,-O3,都没有太大效果。
: 最多有个10%的变化。还是单线程那个快不少。
: 另外,那个分号加上去了,不影响结果。
: -O3下的结果:
: 3.22 seconds,双线程
: 2.41 seconds,单线程。
: 我是明明看见双线程时候,两个cpu100%,然后一个还维持在100%,另一个掉下来。对,我就同步了一次,在双线程的时候。

z****e
发帖数: 2024
9
那个see()不好去掉,因为要知道线程什么时候结束
see()里边有个wait在等信号,去掉see(),main()直接就结束了。

【在 p***o 的大作中提到】
: 你把cal0里的signal去掉,然后把cal0后面的see也去掉,看看啥结果。
:
: 对,我就同步了一次,在双线程的时候。

z****e
发帖数: 2024
10
刚才编译有个typo,后来发现了,-O3是总体快了很多。但是仍然是单线程快
output
相关主题
用多线程怎么比单线程还慢呢?如果一个core,多线程还有必要吗?
写thread safe程序现在也是程序员必须要掌握的了吧问个题
Java的服务器一般运行几个线程比较合适?android上有没有CADisplayLink一样的方法?
进入Programming版参与讨论
p***o
发帖数: 1252
11
你不是有个f么,单线程用这个好了。

【在 z****e 的大作中提到】
: 那个see()不好去掉,因为要知道线程什么时候结束
: see()里边有个wait在等信号,去掉see(),main()直接就结束了。

p***o
发帖数: 1252
12
那个execute函数会创建一个线程吗?如果是,你得把这个时间刨掉。
一般来说要避免频繁创建/销毁线程。通常都搞个thread pool,然后
把要执行的函数传过去。

【在 z****e 的大作中提到】
: 我用了个Zthread库,不是很主流的。
: #include
: #include
: #include
: #include
: #include
: #include "zthread/Condition.h"
: #include "zthread/Mutex.h"
: #include "zthread/Guard.h"
: #include "zthread/ThreadedExecutor.h"

z****e
发帖数: 2024
13
我就是单线程用的那个f。
觉得多线程这玩意还真难搞得很精通。

【在 p***o 的大作中提到】
: 你不是有个f么,单线程用这个好了。
g****y
发帖数: 436
14
heihei, in my test:
gcc: -O1
total loops:2000000000
Time for threaded call:00:00:02
Time for non-threaded call:00:00:03
codes:
#include "threading.h"
#include "timer.h"
#include
#include
#include
int M;
void* cal1(void* vp) {
int flag1 = 0;
for (int n = 0; n < M; n++) {
flag1 = 1;
}
}
void* cal2(void* vp) {
int flag2 = 0;
for (int n = 0; n < M; n++) {
flag2 = 1;
}
}
void* cal0(void* vp) {
int flag2 = 0;
for (int n = 0; n < M; n++) {
fla

【在 z****e 的大作中提到】
: 我用了个Zthread库,不是很主流的。
: #include
: #include
: #include
: #include
: #include
: #include "zthread/Condition.h"
: #include "zthread/Mutex.h"
: #include "zthread/Guard.h"
: #include "zthread/ThreadedExecutor.h"

z****e
发帖数: 2024
15
明白了,是cpu时间。白郁闷了半天。
1 (共1页)
进入Programming版参与讨论
相关主题
怎样提高C#计算程序的performance?c++下如何实现多线程?
关于多线程编程的一个问题用多线程怎么比单线程还慢呢?
晕了,多线程,共享内存的问题写thread safe程序现在也是程序员必须要掌握的了吧
FORTRAN数组越界问题Java的服务器一般运行几个线程比较合适?
Java 多线程:还需要好CPU?如果一个core,多线程还有必要吗?
重复利用threads的问题问个题
pthread and C++android上有没有CADisplayLink一样的方法?
多线程编程前景如何?拜托推荐多线程和socket的书
相关话题的讨论汇总
话题: include话题: zthread话题: void话题: int话题: flag1