[asterisk-users] Benchmarking AGI performance in C, PHP, and Perl

Steve Edwards asterisk.org at sedwards.com
Mon Jul 11 20:45:08 CDT 2011


>> Also they tend to be used more by 'non-programmers' who get away with 
>> 'stupid' stuff like calling out to system() and piping a bunch of 
>> commands together because they don't know how to use the language 
>> properly :)

On Mon, 11 Jul 2011, cbulist at gmail.com wrote:

> I understand your point but I don't share it.... There are a lot 
> Asterisk-Perl project working in production environment.

Then I didn't communicate my point clearly.

I'm not disparaging Perl programmers or the language. I'm just saying it 
is easier to 'abuse' a language like Perl or PHP than C.

This Bash snippet was posted to the -users list a couple of years ago. I'm 
not trying to embarrass the original programmer or trash his skills, I'm 
just using this snippet as an example. We've all got skeletons in our 
closets :)

> while read line; do
>    epoch=`echo $line | cut -d '|' -f 1`
>    if [ $epoch -ge $start_epoch -a $epoch -le $end_epoch ]; then
>      echo $line
>    fi
> done < /var/log/asterisk/queue_log

Note the second line. It creates a couple (2 or 3) of processes to extract 
the first field from the queue_log file. For every line in the input file!

This kind of coding is easy in a scripting language. It would be way more 
difficult in C. So much more difficult, a programmer with the requisite 
skills to do it should recognize the inefficiency and do it another way.

If the original programmer had a better grasp of the language, he could 
have coded this line as:

         epoch=${line:0:10}

Since the Epoch will be 10 digits for the next 300 years, I'd feel 
relatively comfortable with this solution.

This single change reduced the execution time of his script by an order of 
magnitude.

Recoding it in a language more appropriate to processing lots of data 
(like C) would reduce the execution time to 1/3,000th of the original. And 
yes, I did it and measured it.

A skilled programmer (like any craftsman) has many tools in his toolbox, 
the experience to choose the right one, and the skill to use it well.

C is my sharpest tool so I tend to see everything through that lens, but 
I'm learning to appreciate PHP and how it lets me represent some 
programming problems clearly, quickly and sufficiently efficient.

-- 
Thanks in advance,
-------------------------------------------------------------------------
Steve Edwards       sedwards at sedwards.com      Voice: +1-760-468-3867 PST
Newline                                              Fax: +1-760-731-3000



More information about the asterisk-users mailing list