LINUX中的BOTTOMHALF 又可以分为TASKLET和SOFIRQ。二者的主要区别是复杂度和并发性(CONCURRENCY)。下面COPY自<UNDERSTANDINGLINUX NETWORK INTERNALS>一书。
Tasklet: Only one instance of each tasklet can run at anytime. Different tasklets can run concurrently on different CPUs.
Softirq: Only one instance of each softirq can run at thesame time on a CPU. However, the same softirq can run on different CPUsconcurrentlyOnly one instance of each softirq can run at the same time on aCPU. However, the same softirq can run on different CPUs concurrently.
Linux design does not allow process switching while the CPU is executing a kernel control
path associated with an interrupt. However, such kernel control paths may be arbitrarily
nested: an interrupt handler may be interrupted by another interrupt handler and so on.
To implement an interrupt model without priority levels. Because each interrupt handler may be deferred by another one, there is no need to establish predefined priorities among hardware devices. This simplifies the kernel code and improves its portability.