分类: C/C++
2009-02-27 16:26:02
连接请求:
{ If(有空槽)
{ 建立网络链路通道 chan;
If(功能号 = 1)
建立新线程,指定 funcl(chan)为执行代码,注意此时该线程并未执行
Else
建立新线程,指定 func2(chan)为执行代码
EndIf
Else
拒绝服务请求
}
断开连接:
{ 查找到相应的网络链路和提供服务的线程;
取消该链路;
删除该线程
}
其他:
其他控制操作
EndCase
}
End
在各个服务子程序中,它根据主程序传来的网络链路通道号,与自己对应的客户进行通信:
While(TRUE) {
同步读取服务请求;
If (读取失败) Exit;
执行服务操作;
返回服务结果
}
服务线程同步读取客户的请求信息,在读取之前,它处于等待状态。如果主控线程已取消了相应的链路通道,则读取操作失败,服务线程终止,并被主控线程删除。从算法可以看出主控线程通过邮箱监视网络上的控制信息(包括客户的连接请求、断开连接,以及其他控制),而每个客户需要的服务由专用的服务线程来处理:当某些线程在网络上读写信息的时候,另外的线程可能正在进行数据处理,还有些线程正在访问磁盘,等等。所有的线程并行工作,为客户提供了最大限度的服务。不但解决了原始的串行服务方式中系统资源利用率低的问题,而且又没有并发多进程带来的庞大系统开销的缺陷。从这个例子可以看出,并发多线程在分布式程序设计中的优越性。
多线程对程序结构的改变
多线程改变了程序的基本结构。不同于按照严格的线性方式执行的单线程程序,多线程程序并发地执行它自身的各个部分。这样,所有的多线程程序都包含了相似的元素。因此,多线程程序的主要问题是管理线程之间的交互。
所有的进程都至少包含一个执行线程,称之为主线程。主线程在程序开始时创建。在多线程程序中,主线程创建一个或者多个子线程。因此,每个多线程的进程都以一个执行线程开始,然后创建一个或者多个附加的线程。在设计合理的程序中,每个线程都代表一个逻辑上独立的活动单元。
多线程的主要优点是可以让您编写非常高效的程序,因为它使得您可以利用大多数程序都具有的空闲时间。大多数的I/O设备,无论是网络端口、磁盘驱动器还是键盘,速度都比CPU慢很多。通常,程序将主要的执行时间都花费在等待接收或者发送数据上。通过谨慎地使用多线程,您的程序可以在空闲的时候执行另一个任务。例如,当程序的一部分通过Internet发送文件时,另一个部分可以读取键盘的输入,还有一个部分可以将下一步要发送的数据块缓存。
C++没有包含任何对多线程应用程序的内建的支持。相反,它依赖于操作系统提供这个特性。考虑到Java和C#都提供了内建的多线程支持,您