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
b7222548
Commit
b7222548
authored
Apr 20, 2012
by
neverlord
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
cache nodes to reduce new/delete calls
parent
492f6535
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
35 additions
and
3 deletions
+35
-3
cppa/abstract_actor.hpp
cppa/abstract_actor.hpp
+32
-3
src/abstract_event_based_actor.cpp
src/abstract_event_based_actor.cpp
+3
-0
No files found.
cppa/abstract_actor.hpp
View file @
b7222548
...
@@ -166,17 +166,46 @@ class abstract_actor : public Base
...
@@ -166,17 +166,46 @@ class abstract_actor : public Base
protected:
protected:
mailbox_type
m_mailbox
;
mailbox_type
m_mailbox
;
util
::
fixed_vector
<
mailbox_element
*
,
10
>
m_nodes
;
template
<
typename
T
>
inline
mailbox_element
*
fetch_node
(
actor
*
sender
,
any_tuple
msg
)
static
inline
mailbox_element
*
fetch_node
(
actor
*
sender
,
T
&&
msg
)
{
{
return
new
mailbox_element
(
sender
,
std
::
forward
<
T
>
(
msg
));
if
(
m_nodes
.
empty
())
{
return
new
mailbox_element
(
sender
,
std
::
move
(
msg
));
}
else
{
auto
result
=
m_nodes
.
back
();
m_nodes
.
pop_back
();
result
->
marked
=
false
;
result
->
sender
=
sender
;
result
->
msg
=
std
::
move
(
msg
);
return
result
;
}
}
inline
void
release_node
(
mailbox_element
*
node
)
{
if
(
m_nodes
.
full
())
{
delete
node
;
}
else
{
m_nodes
.
push_back
(
node
);
}
}
}
template
<
typename
...
Args
>
template
<
typename
...
Args
>
abstract_actor
(
Args
&&
...
args
)
:
Base
(
std
::
forward
<
Args
>
(
args
)...)
abstract_actor
(
Args
&&
...
args
)
:
Base
(
std
::
forward
<
Args
>
(
args
)...)
,
m_exit_reason
(
exit_reason
::
not_exited
)
,
m_exit_reason
(
exit_reason
::
not_exited
)
{
{
for
(
size_t
i
=
0
;
i
<
m_nodes
.
max_size
();
++
i
)
{
m_nodes
.
push_back
(
new
mailbox_element
);
}
}
}
void
cleanup
(
std
::
uint32_t
reason
)
void
cleanup
(
std
::
uint32_t
reason
)
...
...
src/abstract_event_based_actor.cpp
View file @
b7222548
...
@@ -138,6 +138,7 @@ void abstract_event_based_actor::resume(util::fiber*, scheduler::callback* cb)
...
@@ -138,6 +138,7 @@ void abstract_event_based_actor::resume(util::fiber*, scheduler::callback* cb)
{
{
case
drop_msg
:
case
drop_msg
:
{
{
release_node
(
e
.
release
());
break
;
// nop
break
;
// nop
}
}
case
msg_handled
:
case
msg_handled
:
...
@@ -155,11 +156,13 @@ void abstract_event_based_actor::resume(util::fiber*, scheduler::callback* cb)
...
@@ -155,11 +156,13 @@ void abstract_event_based_actor::resume(util::fiber*, scheduler::callback* cb)
{
{
case
drop_msg
:
case
drop_msg
:
{
{
release_node
(
i
->
release
());
i
=
m_cache
.
erase
(
i
);
i
=
m_cache
.
erase
(
i
);
break
;
break
;
}
}
case
msg_handled
:
case
msg_handled
:
{
{
release_node
(
i
->
release
());
m_cache
.
erase
(
i
);
m_cache
.
erase
(
i
);
if
(
m_loop_stack
.
empty
())
if
(
m_loop_stack
.
empty
())
{
{
...
...
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