[asterisk-dev] [Code Review] Threadpool Support

David Lee reviewboard at asterisk.org
Thu Jan 10 13:00:45 CST 2013


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviewboard.asterisk.org/r/2242/#review7651
-----------------------------------------------------------


I focused mainly on the API's. I'll get to reviewing the implementation in detail when my eyes stop bugging out.


/trunk/include/asterisk/taskprocessor.h
<https://reviewboard.asterisk.org/r/2242/#comment14559>

    This is enough of a change to update the copyright. For the .c file, too.



/trunk/include/asterisk/taskprocessor.h
<https://reviewboard.asterisk.org/r/2242/#comment14560>

    Not your words, but 'named singleton' is a poor description. It's just a 'named object'.



/trunk/include/asterisk/taskprocessor.h
<https://reviewboard.asterisk.org/r/2242/#comment14557>

    typo



/trunk/include/asterisk/taskprocessor.h
<https://reviewboard.asterisk.org/r/2242/#comment14561>

    I think I see what you're doing, and I think you're exposing too much through the API.
     * Make ast_taskprocessor_listener and opaque struct
       * add accessor functions if you need any
     * get rid of the private_data alloc and free callbacks; just put that data in the taskprocessor struct



/trunk/include/asterisk/taskprocessor.h
<https://reviewboard.asterisk.org/r/2242/#comment14562>

    The whole named-task-processor gives this function weird semantics. What happens if the taskprocessor already exists? What if it already had a listener?



/trunk/include/asterisk/taskprocessor.h
<https://reviewboard.asterisk.org/r/2242/#comment14563>

    It seems really odd to make this a part of the taskprocessor's API. Doesn't it already have a thread that's popping tasks and executing them?



/trunk/include/asterisk/threadpool.h
<https://reviewboard.asterisk.org/r/2242/#comment14564>

    My comments about making taskprocessor_listener an opaque struct apply equally to threadpool_listener.



/trunk/include/asterisk/threadpool.h
<https://reviewboard.asterisk.org/r/2242/#comment14552>

    typo



/trunk/include/asterisk/threadpool.h
<https://reviewboard.asterisk.org/r/2242/#comment14554>

    Can listener be NULL?



/trunk/include/asterisk/threadpool.h
<https://reviewboard.asterisk.org/r/2242/#comment14555>

    Why are some options arguments to this function, and others fields in the options struct? I recommend putting everything in the options struct.



/trunk/main/threadpool.c
<https://reviewboard.asterisk.org/r/2242/#comment14565>

    I think rather than using a taskprocessor here, maybe what you really want to do is extract the shared threadpool/taskprocessor code into a third thing.


- David


On Jan. 7, 2013, 4:20 p.m., Mark Michelson wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviewboard.asterisk.org/r/2242/
> -----------------------------------------------------------
> 
> (Updated Jan. 7, 2013, 4:20 p.m.)
> 
> 
> Review request for Asterisk Developers.
> 
> 
> Summary
> -------
> 
> This review adds a generic threadpool for Asterisk.
> 
> The threadpool implementation here is very similar to the one implemented in Asterisk SCF. Since this is implemented in C, the "is a" semantics offered by C++ are not available, so that had to be worked around.
> 
> The threadpool, when created, creates a taskprocessor. The threadpool itself exists as the private data on a taskprocessor listener. In this way, the threadpool can react to changes on the taskprocessor by informing its threadpool listener.
> 
> The threadpool informs its listeners of various changes:
> - When a task gets pushed into the threadpool
> - When the threadpool's task list has become empty
> - When the state of the threadpool's threads has changed, such as when an active thread goes idle or an idle thread is destroyed.
> 
> The threadpool listener can react to these changes as it sees fit. This allows for different policies to be adopted by different modules.
> 
> The offers some options for automatic behavior for common forms of operation. At allocation, an idle timeout can be specified in order to allow for idle threads to automatically get removed from the threadpool once they have been idle for a certain amount of time. Also, an automatic increment can be specified if the threadpool has tasks added to it and no idle threads are available to handle the task. With these, it may be possible for listeners only to intervene in certain situations. More options can possibly be added if they are not too policy-specific.
> 
> This set of changes is dependent on the set of taskprocessor changes introduced in https://reviewboard.asterisk.org/r/2200 . Since these changes were developed in the same branch as the taskprocessor changes, it means that all the taskprocessor changes are also included in this review. While there are minor changes in the taskprocessor code here as compared to the code in review 2200, they are very minor changes, and so close scrutiny of the taskprocessor changes is not as important as the threadpool code itself.
> 
> 
> This addresses bug ASTERISK-20691.
>     https://issues.asterisk.org/jira/browse/ASTERISK-20691
> 
> 
> Diffs
> -----
> 
>   /trunk/main/threadpool.c PRE-CREATION 
>   /trunk/include/asterisk/taskprocessor.h 378146 
>   /trunk/include/asterisk/threadpool.h PRE-CREATION 
>   /trunk/main/taskprocessor.c 378146 
>   /trunk/tests/test_taskprocessor.c PRE-CREATION 
>   /trunk/tests/test_threadpool.c PRE-CREATION 
> 
> Diff: https://reviewboard.asterisk.org/r/2242/diff
> 
> 
> Testing
> -------
> 
> A suite of unit tests have been added to ensure that the threadpool works as expected. They all pass.
> 
> 
> Thanks,
> 
> Mark
> 
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-dev/attachments/20130110/9c42e883/attachment-0001.htm>


More information about the asterisk-dev mailing list