Add threadpool support to Asterisk.
authorMark Michelson <mmichelson@digium.com>
Fri, 18 Jan 2013 15:42:10 +0000 (15:42 +0000)
committerMark Michelson <mmichelson@digium.com>
Fri, 18 Jan 2013 15:42:10 +0000 (15:42 +0000)
commita0a1fab4a1c9a5225a72d0118fea854d94c9d7ff
tree8fe26e7f8f152a91de704489a51ceb9adddede63
parentbe727bf0d217ae086f5df3f1a3e3338be7c71a48
parent84c50fde1fef6ec1a8930b9b6217bf3c3d99d2c7
Add threadpool support to Asterisk.

This commit consists of two parts.

Part one changes the taskprocessor API to be less self-contained.
Instead, the taskprocessor is now more of a task queue that informs
a listener of changes to the queue. The listener then has the responsibility
of executing the tasks as it pleases. There is a default listener implementation
that functions the same way as "classic" taskprocessors, in that it creates
a single thread for tasks to execute in. Old users of taskprocessors have
not been altered and still function the same way.

Part two introduces the threadpool API. A threadpool is a special type of
taskprocessor listener that has multiple threads associated with it. The threadpool
also has an optional listener that can adjust the threadpool as conditions change.
In addition the threadpool has a set of options that can allow for the threadpool
to grow and shrink on its own as tasks are added and executed.

Both set of changes contain accompanying unit tests.

(closes issue ASTERISK-20691)
Reported By: Matt Jordan

Review: https://reviewboard.asterisk.org/r/2242

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@379432 65c4cc65-6c06-0410-ace0-fbb531ad65f3