Mugwump, to appropriately answer your question, AMX Mod X is single threaded just as the HL server is.
Tasks work like this:
Every time the server executes a frame, a timer is increased. If the timer has increased by 0.1 seconds, a list of all the current tasks is checked. If a task's interval has been reached, the task is executed.
Therefore, tasks are decently efficient.
The question about allocating variables is an even better one. Each plugin has a heap and a stack of memory which is statically allocated before runtime. This means that although your plugin may do this:
..in a task that runs every second, there will be no performance loss because the heap is already allocated - it just shifts an internal pointer by 4096*4 bytes... a push/pop operation.
Plugin memory structure:
[CODE][HEAP-> <- STACK]
As you allocate new variables, you're not using more memory... you're just pointing toward memory that's already been allocated. You can verify this with the amx_Allot() and amx_Release() functions which just shift an index.
If anything, the best way to optimize your plugin is to shift the intensive work to an AMXx 0.20 module. The 0.20 module API gives an excellent and easy way to integrate your module with your plugin[s].
I hope this answers your question ;]
__________________