Redian新闻
>
寻找土木结构工程师咨询住房foundation支撑问题
avatar
寻找土木结构工程师咨询住房foundation支撑问题# CivilEngineering - 土木工程
p*i
1
张阿姨有爱心,喜欢小孩,为人正直,工作认真负责,现在我家带快满2月的小宝宝
,在1月2号以后AVAILABLE。现帮阿姨网上招工,希望能找一家长期带小宝宝的工,最
好从出生做起。有意者请联系 张阿姨电话:917-214-4998; 如需REFERENCE,雇主电
话:201-364-7172。
avatar
z*e
2
我怎么觉得很多情况多线程都比单线程慢呢?
我是能不加互斥锁就不加,
而且也没有busy waiting。
看见两个cpu100%工作,结果,还是比一个cpu100%要慢,或者想当。
这种为什么?
avatar
s*y
3
有吗?
avatar
p*o
4
many reasons, just post your code

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

avatar
l*g
5


【在 s******y 的大作中提到】
: 有吗?
avatar
z*e
6
我用了个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
avatar
s*y
7
请问能否帮我verify一个房子的结构性修补?

【在 l******g 的大作中提到】
: 有
avatar
a*l
8
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"

avatar
p*o
9
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"

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

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

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

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

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

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

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

avatar
z*e
14
刚才编译有个typo,后来发现了,-O3是总体快了很多。但是仍然是单线程快
output
avatar
p*o
15
你不是有个f么,单线程用这个好了。

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

avatar
p*o
16
那个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"

avatar
z*e
17
我就是单线程用的那个f。
觉得多线程这玩意还真难搞得很精通。

【在 p***o 的大作中提到】
: 你不是有个f么,单线程用这个好了。
avatar
g*y
18
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"

avatar
z*e
19
明白了,是cpu时间。白郁闷了半天。
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。