扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
在本页阅读全文(共19页)
引言
在传统上,并发多任务的实现采用的是在操作系统级运行多个进程,由操作系统按照一定的策略(优先级、循环等),调度各个进程的执行,以最大限度的利用计算机的各种资源。在这种实现方法中最基本的调度单位是操作系统级上的进程。由于各个进程拥有自己独立的运行环境(寄存器和地址空间等)。进程与进程之间的耦合关系差,并发性粒度过于粗糙,并发实现也不太容易。所以,除非特殊需要,一般的应用设计都不采用这种技术。
为了克服这些问题,近年来逐步发展了并发多线程的程序设计技术。从并发Ada、并发C等各种并发多任务的程序设计语言(这些语言中采用的虽然不是线程这个术语,但其基本思想是一样的),到Mach、Chorus、Solaris System等各种采用了线程技术的系统,多线程技术得到了迅速发展和日益广泛的应用。IEEE也推出了有关多线程程序设计的标准POSIX1003.4a。特别是在Window NT和Windows 98等流行操作系统中,采用了线程作为基本的调度单位,其API中也提供了有关线程操作的用户程序接口。所有这些无疑都会促进多线程技术在程序设计中被日益广泛的采用。
多线程技术的概念
所谓线程(或称线索,thread),指程序中的以单一的顺序控制流。线程按顺序执行,即在一个线程中,一个时刻只能由一个执行点。显然,按传统方法设计的程序,无论是单道执行的程序,还是由多个进程并发执行的多道程序,就每个程序本身而言,都是由单线程组成的。
多线程程序设计,就是使单个程序中包含并发执行的多个线程。当多线程程序执行时,在该程序对应的进程中就有多个控制流在同时运行,即具有并发执行的多个线程。在一个进程中包含并发执行的多个控制流,而不是把多个控制流一一分散在多个进程中,这是多线程程序设计与并发多进程程序设计截然不同之处。这就决定了二者之间虽然在概念上有许多相通之处,但实现方法则是完全不同。
图1 进程之间的关系
图2 线程之间的关系
多线程程序设计
线程是系统调度的基本单位,是CPU的一条执行路径。一个应用程序实例至少有一个线程,即程序的基本线程或主线程。用户可以根据需要同时创建若干个线程,让一个程序在同一时刻运行多个线路。线程间独立运行,每个线程都轮流占用CPU的运行时间和资源,即将CPU的时间分片,每一个时间片给不同的线程使用。这样,操作系统将不断的将线程挂起、唤醒、再挂起、再唤醒,直至完成整个任务。
当程序在运行时,线程被加载到内存中等待执行。每个线程都可能包含该应用程序的数据、代码或者其他操作系统的资源。一个线程执行程序的一部分,所有线程都能够访问进程的全局变量。
一个采用多线程的应用程序允许同一程序的多个部分同时执行,为程序赋予了并行特性,因而可以执行某些实时性或随机性很强的操作,提高对CPU的利用率,加快信息处理速度。
1、线程的创建
笔者利用Delphi语言进行了程序的开发和编写, 该语言的优点之一是它有一整套线程同步方法,可以很方便地使用。
一个进程的主线程是由操作系统自动生成,如果要让一个主线程创建额外的线程,在WinAPI中,可以调用CreateThread来完成。在Delphi中,所有的线程类可以从TThread类派生得到,如下:
type OptimizeThread = class(TThread) private { Private declarations } DocExec:TADOCommand; CaseID:Integer; //优化方案代码 protected procedure Execute; override; procedure DoAnalyse;virtual;abstract; end; |
ScheOptimizeThread = class (OptimizeThread) private count :integer; //记录航班的分组 protected procedure DoAnalyse;override; public constructor Create(Exec:TADOCommand;CaseID,count:Integer); end; |
OptimizeThread } |
ScheOptimizeThread.Create(Exec:TADOCommand;CaseID,count:Integer); |
便可实现多线程的使用。
结束语
在满足繁杂的运作规定的前提下,使用多线程对航班计划进行优化编排,可显著提高优化效率,有助于降低飞行成本,从而提高整个航空公司的飞行运作效益和飞行管理水平,提高航空公司的市场竞争力,具有广阔的市场应用前景。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者