预计阅读本页时间:-
2.2.8 弹出式线程
在分布式系统中经常使用线程。一个有意义的例子是如何处理到来的消息,例如服务请求。传统的方法是将进程或线程阻塞在一个receive系统调用上,等待消息到来。当消息到达时,该系统调用接收消息,并打开消息检查其内容,然后进行处理。
不过,也可能有另一种完全不同的处理方式,在该处理方式中,一个消息的到达导致系统创建一个处理该消息的线程,这种线程称为弹出式线程,如图2-18所示。弹出式线程的关键好处是,由于这种线程相当新,没有历史——没有必须存储的寄存器、堆栈诸如此类的内容,每个线程从全新开始,每一个线程彼此之间都完全一样。这样,就有可能快速创建这类线程。对该新线程指定所要处理的消息。使用弹出式线程的结果是,消息到达与处理开始之间的时间非常短。

在使用弹出式线程之前,需要提前进行计划。例如,哪个进程中的线程先运行?如果系统支持在内核上下文中运行线程,线程就有可能在那里运行(这是图2-18中没有画出内核的原因)。在内核空间中运行弹出式线程通常比在用户空间中容易且快捷,而且内核空间中的弹出式线程可以很容易访问所有的表格和I/O设备,这些也许在中断处理时有用。而另一方面,出错的内核线程会比出错的用户线程造成更大的损害。例如,如果某个线程运行时间太长,又没有办法抢占它,就可能造成进来的信息丢失。