Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
A
Actor Framework
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
cpp-libs
Actor Framework
Commits
bd1c9fbf
Commit
bd1c9fbf
authored
Jan 12, 2012
by
neverlord
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
some tweaks
parent
74c35219
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
112 additions
and
147 deletions
+112
-147
benchmarks/ActorCreation.scala
benchmarks/ActorCreation.scala
+12
-13
benchmarks/actor_creation.cpp
benchmarks/actor_creation.cpp
+46
-52
cppa.files
cppa.files
+6
-0
unit_testing/test__spawn.cpp
unit_testing/test__spawn.cpp
+48
-82
No files found.
benchmarks/ActorCreation.scala
View file @
bd1c9fbf
...
@@ -59,23 +59,22 @@ class ThreadlessTestee(parent: Actor) extends Actor {
...
@@ -59,23 +59,22 @@ class ThreadlessTestee(parent: Actor) extends Actor {
class
AkkaTestee
(
parent
:
akka.actor.ActorRef
)
extends
akka
.
actor
.
Actor
{
class
AkkaTestee
(
parent
:
akka.actor.ActorRef
)
extends
akka
.
actor
.
Actor
{
def
receive
=
{
def
receive
=
{
case
Spread
(
0
)
=>
parent
!
Result
(
1
)
self
.
stop
case
Spread
(
s
)
=>
case
Spread
(
s
)
=>
if
(
s
>
0
)
{
val
msg
=
Spread
(
s
-
1
)
val
msg
=
Spread
(
s
-
1
)
actorOf
(
new
AkkaTestee
(
self
)).
start
!
msg
actorOf
(
new
AkkaTestee
(
self
)).
start
!
msg
actorOf
(
new
AkkaTestee
(
self
)).
start
!
msg
actorOf
(
new
AkkaTestee
(
self
)).
start
!
msg
}
else
{
parent
!
Result
(
1
)
self
.
stop
}
case
Result
(
v1
)
=>
become
{
become
{
case
Result
(
v2
)
=>
case
Result
(
r1
)
=>
parent
!
Result
(
v1
+
v2
)
become
{
case
Result
(
r2
)
=>
parent
!
Result
(
r1
+
r2
)
self
.
exit
self
.
exit
}
}
}
}
}
}
}
class
AkkaRootTestee
(
n
:
Int
)
extends
akka
.
actor
.
Actor
{
class
AkkaRootTestee
(
n
:
Int
)
extends
akka
.
actor
.
Actor
{
...
...
benchmarks/actor_creation.cpp
View file @
bd1c9fbf
...
@@ -45,62 +45,61 @@ using namespace cppa;
...
@@ -45,62 +45,61 @@ using namespace cppa;
struct
testee
:
fsm_actor
<
testee
>
struct
testee
:
fsm_actor
<
testee
>
{
{
actor_ptr
m_
parent
;
actor_ptr
parent
;
behavior
init_state
;
behavior
init_state
;
testee
(
actor_ptr
const
&
p
arent
)
:
m_parent
(
parent
)
testee
(
actor_ptr
const
&
p
ptr
)
:
parent
(
pptr
)
{
{
init_state
=
init_state
=
(
(
on
<
atom
(
"spread"
),
int
>
()
>>
[
=
](
int
x
)
on
(
atom
(
"spread"
),
0
)
>>
[
=
](
)
{
{
if
(
x
>
0
)
send
(
parent
,
atom
(
"result"
),
(
uint32_t
)
1
);
become_void
();
},
on
(
atom
(
"spread"
),
arg_match
)
>>
[
=
](
int
x
)
{
{
any_tuple
msg
=
make_tuple
(
atom
(
"spread"
),
x
-
1
);
any_tuple
msg
=
make_tuple
(
atom
(
"spread"
),
x
-
1
);
spawn
(
new
testee
(
this
))
<<
msg
;
spawn
(
new
testee
(
this
))
<<
msg
;
spawn
(
new
testee
(
this
))
<<
msg
;
spawn
(
new
testee
(
this
))
<<
msg
;
become
become
(
(
on
<
atom
(
"result"
),
uint32_t
>
()
>>
[
=
](
uint32_t
v
1
)
on
(
atom
(
"result"
),
arg_match
)
>>
[
=
](
uint32_t
r
1
)
{
{
become
become
(
(
on
<
atom
(
"result"
),
uint32_t
>
()
>>
[
=
](
uint32_t
v
2
)
on
(
atom
(
"result"
),
arg_match
)
>>
[
=
](
uint32_t
r
2
)
{
{
send
(
m_parent
,
atom
(
"result"
),
v1
+
v
2
);
send
(
parent
,
atom
(
"result"
),
r1
+
r
2
);
become_void
();
become_void
();
}
}
);
);
}
}
);
);
}
}
else
{
send
(
m_parent
,
atom
(
"result"
),
(
std
::
uint32_t
)
1
);
become_void
();
}
}
);
);
}
}
};
};
void
stacked_
actor
(
actor_ptr
parent
)
void
stacked_
testee
(
actor_ptr
parent
)
{
{
receive
receive
(
(
on
<
atom
(
"spread"
),
int
>
()
>>
[
&
](
int
x
)
on
(
atom
(
"spread"
),
0
)
>>
[
&
](
)
{
{
if
(
x
>
0
)
send
(
parent
,
atom
(
"result"
),
(
uint32_t
)
1
);
},
on
(
atom
(
"spread"
),
arg_match
)
>>
[
&
](
int
x
)
{
{
any_tuple
msg
=
make_tuple
(
atom
(
"spread"
),
x
-
1
);
any_tuple
msg
=
make_tuple
(
atom
(
"spread"
),
x
-
1
);
spawn
(
stacked_actor
,
self
)
<<
msg
;
spawn
(
stacked_testee
,
self
)
<<
msg
;
spawn
(
stacked_actor
,
self
)
<<
msg
;
spawn
(
stacked_testee
,
self
)
<<
msg
;
receive
receive
(
(
on
<
atom
(
"result"
),
uint32_t
>
(
)
>>
[
&
](
uint32_t
v1
)
on
(
atom
(
"result"
),
arg_match
)
>>
[
&
](
uint32_t
v1
)
{
{
receive
receive
(
(
on
<
atom
(
"result"
),
uint32_t
>
(
)
>>
[
&
](
uint32_t
v2
)
on
(
atom
(
"result"
),
arg_match
)
>>
[
&
](
uint32_t
v2
)
{
{
send
(
parent
,
atom
(
"result"
),
v1
+
v2
);
send
(
parent
,
atom
(
"result"
),
v1
+
v2
);
}
}
...
@@ -108,11 +107,6 @@ void stacked_actor(actor_ptr parent)
...
@@ -108,11 +107,6 @@ void stacked_actor(actor_ptr parent)
}
}
);
);
}
}
else
{
send
(
parent
,
atom
(
"result"
),
(
std
::
uint32_t
)
1
);
}
}
);
);
}
}
...
@@ -147,7 +141,7 @@ int main(int argc, char** argv)
...
@@ -147,7 +141,7 @@ int main(int argc, char** argv)
int
num
=
rd
<
int
>
(
argv
[
2
]);
int
num
=
rd
<
int
>
(
argv
[
2
]);
if
(
strcmp
(
argv
[
1
],
"stacked"
)
==
0
)
if
(
strcmp
(
argv
[
1
],
"stacked"
)
==
0
)
{
{
send
(
spawn
(
stacked_
actor
,
self
),
atom
(
"spread"
),
num
);
send
(
spawn
(
stacked_
testee
,
self
),
atom
(
"spread"
),
num
);
}
}
else
if
(
strcmp
(
argv
[
1
],
"event-based"
)
==
0
)
else
if
(
strcmp
(
argv
[
1
],
"event-based"
)
==
0
)
{
{
...
...
cppa.files
View file @
bd1c9fbf
...
@@ -247,6 +247,12 @@ src/receive.cpp
...
@@ -247,6 +247,12 @@ src/receive.cpp
benchmarks/actor_creation.cpp
benchmarks/actor_creation.cpp
benchmarks/mailbox_performance.cpp
benchmarks/mailbox_performance.cpp
benchmarks/mixed_case.cpp
benchmarks/mixed_case.cpp
benchmarks/actor_creation.erl
benchmarks/mailbox_performance.erl
benchmarks/mixed_case.erl
benchmarks/ActorCreation.scala
benchmarks/MailboxPerformance.scala
benchmarks/MixedCase.scala
cppa/util/default_deallocator.hpp
cppa/util/default_deallocator.hpp
cppa/util/producer_consumer_list.hpp
cppa/util/producer_consumer_list.hpp
cppa/util/arg_match_t.hpp
cppa/util/arg_match_t.hpp
unit_testing/test__spawn.cpp
View file @
bd1c9fbf
...
@@ -28,28 +28,13 @@ using namespace cppa;
...
@@ -28,28 +28,13 @@ using namespace cppa;
struct
event_testee
:
public
fsm_actor
<
event_testee
>
struct
event_testee
:
public
fsm_actor
<
event_testee
>
{
{
behavior
*
w4str
()
{
return
&
wait4string
;
}
behavior
*
w4float
()
{
return
&
wait4float
;
}
behavior
*
w4int
()
{
return
&
init_state
;
}
behavior
wait4string
=
behavior
wait4string
=
(
(
on
<
std
::
string
>
()
>>
[
this
]()
on
<
std
::
string
>
()
>>
[
=
]()
{
{
become
(
w4int
()
);
become
(
&
wait4int
);
},
},
on
<
atom
(
"
GetS
tate"
)
>
()
>>
[
=
]()
on
<
atom
(
"
get_s
tate"
)
>
()
>>
[
=
]()
{
{
reply
(
"wait4string"
);
reply
(
"wait4string"
);
}
}
...
@@ -59,26 +44,28 @@ struct event_testee : public fsm_actor<event_testee>
...
@@ -59,26 +44,28 @@ struct event_testee : public fsm_actor<event_testee>
(
(
on
<
float
>
()
>>
[
=
]()
on
<
float
>
()
>>
[
=
]()
{
{
become
(
w4str
()
);
become
(
&
wait4string
);
},
},
on
<
atom
(
"
GetS
tate"
)
>
()
>>
[
=
]()
on
<
atom
(
"
get_s
tate"
)
>
()
>>
[
=
]()
{
{
reply
(
"wait4float"
);
reply
(
"wait4float"
);
}
}
);
);
behavior
init_state
=
behavior
wait4int
=
(
(
on
<
int
>
()
>>
[
=
]()
on
<
int
>
()
>>
[
=
]()
{
{
become
(
w4float
()
);
become
(
&
wait4float
);
},
},
on
<
atom
(
"
GetS
tate"
)
>
()
>>
[
=
]()
on
<
atom
(
"
get_s
tate"
)
>
()
>>
[
=
]()
{
{
reply
(
"
init_state
"
);
reply
(
"
wait4int
"
);
}
}
);
);
behavior
&
init_state
=
wait4int
;
};
};
#else
#else
...
@@ -90,19 +77,21 @@ class event_testee : public fsm_actor<event_testee>
...
@@ -90,19 +77,21 @@ class event_testee : public fsm_actor<event_testee>
behavior
wait4string
;
behavior
wait4string
;
behavior
wait4float
;
behavior
wait4float
;
behavior
init_state
;
behavior
wait4int
;
behavior
&
init_state
;
public:
public:
event_testee
()
event_testee
()
:
init_state
(
wait4int
)
{
{
wait4string
=
wait4string
=
(
(
on
<
std
::
string
>
()
>>
[
=
]()
on
<
std
::
string
>
()
>>
[
=
]()
{
{
become
(
&
init_state
);
become
(
&
wait4int
);
},
},
on
<
atom
(
"
GetS
tate"
)
>
()
>>
[
=
]()
on
<
atom
(
"
get_s
tate"
)
>
()
>>
[
=
]()
{
{
reply
(
"wait4string"
);
reply
(
"wait4string"
);
}
}
...
@@ -112,40 +101,24 @@ class event_testee : public fsm_actor<event_testee>
...
@@ -112,40 +101,24 @@ class event_testee : public fsm_actor<event_testee>
(
(
on
<
float
>
()
>>
[
=
]()
on
<
float
>
()
>>
[
=
]()
{
{
//become(&wait4string);
become
(
&
wait4string
);
become
(
on
<
std
::
string
>
()
>>
[
=
]()
{
become
(
&
init_state
);
},
on
<
atom
(
"GetState"
)
>
()
>>
[]()
{
reply
(
"wait4string"
);
}
);
},
},
on
<
atom
(
"
GetS
tate"
)
>
()
>>
[
=
]()
on
<
atom
(
"
get_s
tate"
)
>
()
>>
[
=
]()
{
{
reply
(
"wait4float"
);
reply
(
"wait4float"
);
}
}
);
);
init_state
=
wait4int
=
(
(
on
<
int
>
()
>>
[
=
]()
on
<
int
>
()
>>
[
=
]()
{
{
become
(
&
wait4float
);
become
(
&
wait4float
);
},
},
on
<
atom
(
"GetState"
)
>
()
>>
[
=
]()
on
<
atom
(
"get_state"
)
>
()
>>
[
=
]()
{
reply
(
"init_state"
);
},
after
(
std
::
chrono
::
seconds
(
5
))
>>
[
=
]()
{
{
quit
(
exit_reason
::
user_defined
);
reply
(
"wait4int"
);
}
}
);
);
}
}
...
@@ -158,27 +131,21 @@ abstract_event_based_actor* event_testee2()
...
@@ -158,27 +131,21 @@ abstract_event_based_actor* event_testee2()
{
{
struct
impl
:
fsm_actor
<
impl
>
struct
impl
:
fsm_actor
<
impl
>
{
{
int
num_timeouts
;
behavior
wait4timeout
(
int
remaining
)
timed_invoke_rules
init_state
;
impl
()
:
num_timeouts
(
0
)
{
{
init_state
=
return
(
(
others
()
>>
[]()
{
cout
<<
"event testee2: "
<<
to_string
(
last_received
())
<<
endl
;
},
after
(
std
::
chrono
::
milliseconds
(
50
))
>>
[
=
]()
after
(
std
::
chrono
::
milliseconds
(
50
))
>>
[
=
]()
{
{
if
(
++
num_timeouts
>=
5
)
if
(
remaining
==
1
)
become_void
();
{
else
become
(
wait4timeout
(
remaining
-
1
));
quit
(
exit_reason
::
normal
);
}
}
}
);
);
}
}
behavior
init_state
;
impl
()
:
init_state
(
wait4timeout
(
5
))
{
}
};
};
return
new
impl
;
return
new
impl
;
}
}
...
@@ -186,8 +153,6 @@ abstract_event_based_actor* event_testee2()
...
@@ -186,8 +153,6 @@ abstract_event_based_actor* event_testee2()
struct
chopstick
:
public
fsm_actor
<
chopstick
>
struct
chopstick
:
public
fsm_actor
<
chopstick
>
{
{
behavior
init_state
;
behavior
taken_by
(
actor_ptr
hakker
)
behavior
taken_by
(
actor_ptr
hakker
)
{
{
return
return
...
@@ -207,17 +172,16 @@ struct chopstick : public fsm_actor<chopstick>
...
@@ -207,17 +172,16 @@ struct chopstick : public fsm_actor<chopstick>
);
);
}
}
behavior
init_state
;
chopstick
()
chopstick
()
{
{
init_state
=
init_state
=
(
(
on
(
atom
(
"take"
),
arg_match
)
>>
[
=
](
actor_ptr
hakker
)
on
(
atom
(
"take"
),
arg_match
)
>>
[
=
](
actor_ptr
hakker
)
{
if
(
hakker
)
{
{
become
(
taken_by
(
hakker
));
become
(
taken_by
(
hakker
));
reply
(
atom
(
"taken"
));
reply
(
atom
(
"taken"
));
}
},
},
on
(
atom
(
"break"
))
>>
[
=
]()
on
(
atom
(
"break"
))
>>
[
=
]()
{
{
...
@@ -237,34 +201,36 @@ class testee_actor : public scheduled_actor
...
@@ -237,34 +201,36 @@ class testee_actor : public scheduled_actor
void
wait4string
()
void
wait4string
()
{
{
bool
string_received
=
false
;
bool
string_received
=
false
;
receive_while
([
&
]()
{
return
!
string_received
;
})
do_receive
(
(
on
<
std
::
string
>
()
>>
[
&
]()
on
<
std
::
string
>
()
>>
[
&
]()
{
{
string_received
=
true
;
string_received
=
true
;
},
},
on
<
atom
(
"
GetS
tate"
)
>
()
>>
[
&
]()
on
<
atom
(
"
get_s
tate"
)
>
()
>>
[
&
]()
{
{
reply
(
"wait4string"
);
reply
(
"wait4string"
);
}
}
);
)
.
until
([
&
]()
{
return
string_received
;
});
}
}
void
wait4float
()
void
wait4float
()
{
{
bool
float_received
=
false
;
bool
float_received
=
false
;
receive_while
([
&
]()
{
return
!
float_received
;
})
do_receive
(
(
on
<
float
>
()
>>
[
&
]()
on
<
float
>
()
>>
[
&
]()
{
{
float_received
=
true
;
float_received
=
true
;
wait4string
();
wait4string
();
},
},
on
<
atom
(
"
GetS
tate"
)
>
()
>>
[
&
]()
on
<
atom
(
"
get_s
tate"
)
>
()
>>
[
&
]()
{
{
reply
(
"wait4float"
);
reply
(
"wait4float"
);
}
}
);
)
.
until
([
&
]()
{
return
float_received
;
});
}
}
public:
public:
...
@@ -277,9 +243,9 @@ class testee_actor : public scheduled_actor
...
@@ -277,9 +243,9 @@ class testee_actor : public scheduled_actor
{
{
wait4float
();
wait4float
();
},
},
on
<
atom
(
"
GetS
tate"
)
>
()
>>
[
&
]()
on
<
atom
(
"
get_s
tate"
)
>
()
>>
[
&
]()
{
{
reply
(
"
init_state
"
);
reply
(
"
wait4int
"
);
}
}
);
);
}
}
...
@@ -346,10 +312,10 @@ std::string behavior_test()
...
@@ -346,10 +312,10 @@ std::string behavior_test()
send
(
et
,
.3
f
);
send
(
et
,
.3
f
);
send
(
et
,
"hello again "
+
testee_name
);
send
(
et
,
"hello again "
+
testee_name
);
send
(
et
,
"goodbye "
+
testee_name
);
send
(
et
,
"goodbye "
+
testee_name
);
send
(
et
,
atom
(
"
GetS
tate"
));
send
(
et
,
atom
(
"
get_s
tate"
));
receive
receive
(
(
on
<
std
::
string
>
()
>>
[
&
](
const
std
::
string
&
str
)
on
_arg_match
>>
[
&
](
const
std
::
string
&
str
)
{
{
result
=
str
;
result
=
str
;
},
},
...
@@ -383,8 +349,8 @@ size_t test__spawn()
...
@@ -383,8 +349,8 @@ size_t test__spawn()
await_all_others_done
();
await_all_others_done
();
CPPA_CHECK_EQUAL
(
behavior_test
<
testee_actor
>
(),
"
init_state
"
);
CPPA_CHECK_EQUAL
(
behavior_test
<
testee_actor
>
(),
"
wait4int
"
);
CPPA_CHECK_EQUAL
(
behavior_test
<
event_testee
>
(),
"
init_state
"
);
CPPA_CHECK_EQUAL
(
behavior_test
<
event_testee
>
(),
"
wait4int
"
);
// create 20,000 actors linked to one single actor
// create 20,000 actors linked to one single actor
// and kill them all through killing the link
// and kill them all through killing the link
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment