Took me a while to answer this. I been busy lately.
Long ago in a grid far, far away, listeners were lag fiends. They were poorly constructed and using even a dozen or two listeners could create notable "lag".
Then someone at that far land wised up and fixed that problem, and it did cease to exist.
That said, there are things to consider:
* Listening on channel 0 (main chat) is always more costly than listening on other channels, since that script will listen to everything that is said by any avatar (unless directed to do otherwise). At the least it will listen to everything the owner says. It is thus better to listen on non-zero channels.
* Use positive channels to listen to avatar commands, negative channels to listen to other script commands.
* Big savings tip: If you have multiple items listening to the same channel (such as a series of street lights all over a town)... it is possible to link all those items together and use llMessageLinked() along with a single listen. Not only is llMessageLinked() less "costly", it only works when it's triggered (ie, it's not sitting there waiting to see if something has chatted something).
* Sometimes it is possible to use ONE SCRIPT, and LINK-enabled coding to accomplish a task. In the fore-mentioned example of street lights, if you use listen or llMessage Linked either one, you will need a central recognition script and an individual receiver script in each light. HOWEVER, if you use only one single link-enabled receiver script (your listen), and then have the script locate each linked item and trigger its function, you can literally turn every street light on and off from one centralized script. This isn't "easy" coding but it's not especially complex, and it works very well. The main advantage of this linked-action scripting is that it reduces the number of scripts significantly, thus increasing overall performance.
The English-language concept works like this:
Listen for on/off command
Ascertain total number of linked prims
loop through those prims and look for prims named STREETLIGHT
when a STREETLIGHT prim is found, turn it on or off as commanded (using a llSetLinkPrimitiveParams function)
finish loop
It's surprising how often this scripting trick comes in handy. Once one gets the concept down, the linked function concept can significantly reduce script count on some regions.