运行在现代计算机以及移动设备上的软件通常实现为一个控制多个线程的单独的进程。

比如Web浏览器,可能一个单独的线程处理图片,还有一个单独的线程来接收来自网络的响应。还可以设计应用程序来利用多核系统的处理能力。这样的应用程序可以在多个计算核心中并行执行多个CPU密集型任务。

在某些情况下,可能需要一个应用程序执行几个类似的任务。例如,web服务器接收客户端关于web页面、图像、声音等请求。繁忙的web服务器可能有几个(甚至数千个)客户机并发地访问它。如果web服务器作为传统的单线程进程运行,那么它将能够一次只服务一个客户机,而客户机可能需要等待很长时间才能被服务。

解决办法:

  • 服务器作为一个进程运行,并接收请求。当收到请求,就创建子进程来处理请求。而这也是线程出现之前,所采用的办法。然而,进程创建是耗费时间和资源的。
  • 如果服务器是多线程的话,那么服务器可以创建一个单独的线程来监听客户端的请求。当请求到来,创建一个线程来为该请求服务,然后这个线程继续监听其他的请求。

线程在RPC中也扮演着重要的角色。通常,RPC服务器是多线程的。当服务器接收到一条消息时,它使用一个单独的线程来服务消息。这允许服务器可以服务于多个并发请求。

最后,大多数操作系统内核现在都是多线程的。几个线程在内核中运行,每个线程执行一个特定的任务,例如管理设备、管理内存或中断处理。例如,Solaris在内核中有一组专门用于中断处理的线程;Linux使用内核线程来管理系统中的空闲内存数量。

results matching ""

    No results matching ""