APP下载

多线程技术在云存储视图库中的应用

2015-03-19尹莉莉

新媒体研究 2015年15期
关键词:线程对象界面

尹莉莉

安徽四创电子股份有限公司,安徽合肥 230088

1 多线程的同步技术

开发人员在进行多线程编程时,为了使得各个线程能够协同工作,必须要用到线程同步技术。下面将针对临界区、事件及互斥对象这几种windows线程的同步技术进行介绍。

1.1 临界区对象

临界区其实就是一段代码,它的作用就是控制共享资源不被同时访问,比如一个线程进入临界区访问共享资源后,其他想访问该共享资源的线程将被拒绝访问,处于挂起状态,直到临界区释放后,其他线程才可以继续抢占。利用临界区对象控制线程同步的方法如下。

1)定义临界区对象,该对象是全局变量。

CRITICAL_SECTION g_s;

2)初始化临界区对象。

InitializeCriticalSection(&g_s);

3)进入临界区。

EnterCriticalSection(&g_s);

4)释放临界区。

LeaveCriticalSection(&g_s);

1.2 事件对象

事件对象是一种抽象的对象,有受信和未受信两种状态,一般和WaitForSingleObject函数一起使用,该函数根据事件的受信状态来判断是否让线程访问该共享数据。利用事件对象来保持线程同步的方法如下。

1)创建事件内核对象并保存事件对象的句柄。

HANDLE g_hEvent;//全局变量。

g_hEvent = CreateEvent(NULL,FALSE,FALSE,FALSE,NULL);

createEvent函数可根据参数传入的不同,来决定是否需要手动重置事件对象,同时也可以决定事件创建的初始状态,即受信还是未受信。

2)更改事件对象的状态。

SetEvent(g_hEvent);//设置事件状态为受信状态

ReleaseEvent(g_Event);//设置事件状态为无信号状态

3)使用WaitForSingleObject函数来控制线程对共享资源的访问。

WaitForSingleObject(g_hEvent,INFINITE);

当事件对象是受信状态时,则该线程可以访问共享资源。

1.3 互斥内核对象

互斥对象也是一种内核对象,其与前面两种保持同步的方法类似,利用该技术进行线程同步的方法如下。

1.3.1 创建互斥对象并保存对象句柄

HANDLE g_hMutex;//全局变量

g_hMutex = CreateMutex(NULL,FALSE,NULL);//第二个参数一般设置为false,表示该对象没有被任何线程所占用。

1.3.2 在线程函数中使用WaitForSingleObject

WaitForSingleObject(g_hEvent,INFINITE);

1.3.3 释放互斥对象

ReleaseMutex(g_hMutex);

2 多线程的优缺点

任何东西都有它的两面性,同样多线程也是一把双刃剑,有它的优点也有它的缺点。

首先,多线程的优点如下。

1)提高界面程序响应速度。

当一个程序既要执行耗时的任务,又要更新窗口及接受相关界面操作时,如云存储视图库的客户端界面程序,如果该程序是单线程程序,则会导致界面的卡死,从用户的角度来说,这个应用程序就像处于无响应状态一样。如果程序是多线程程序,可以把耗时任务,比如视频的点播,文件的上传下载等传递给后台线程,当后台线程在执行这些功能的时候,主线程就可以及时的处理用户对界面的操作请求,从用户的体验感上来讲,程序的响应速度就比单线程要快的多。

2)资源利用率高。

因为电脑的工作原理是轮转时间片进行操作,而操作系统中分配时间片的操作是以线程为准的,对比实现同样功能的多线程程序和单线程程序,多线程程序被分配的时间片就比单线程程序多了,从而cpu在它上面花费的时间就多了,这就充分的利用了cpu资源。比如上传下载文件,当用户上传第一个文件时,cpu会等待第一个文件上传完成,如果接下来继续上传其他文件,cpu在上传文件的同时就可以对已上传完成的文件进行下载了,因为在执行文件上传时,cpu还有很多空闲的时间,可以给下载线程分配一定的时间片来执行下载,从而提高了cpu资源的利用率。

其次,多线程的缺点如下。

1)设计复杂。

有一些多线程应用程序比单线程的应用程序要简单,但是一般情况下多线程的设计还是更复杂一点,尤其当多个线程共享进程数据的时候,需要用到同步技术,处理不当就有可能造成线程的死锁。

2)频繁切换上下文的开销。

Cpu是通过分配时间片来控制线程的交替执行的,当一个线程的时间片被用完时,cpu就要准备从该线程切换到下一个被分配到时间片的线程,此时就需要cpu记录当前线程的相关信息,如线程的相关数据,程序的地址等,这些操作完成后,cpu才可以载入另一个线程的相关数据开始执行。由此可知,如果程序是多线程程序,由于线程数量较多,系统将会花费大量的时间来处理线程的频繁切换,这就可能降低程序的执行效率。

3)资源消耗的增加。

多线程程序在充分利用cpu资源的情况下,也会加大对资源的消耗量,因为每个线程都要有自己的一个堆栈,这就加大了对内存的使用,同时程序还需要一些资源来管理线程,这些都导致了资源消耗的增加。

3 结论

综上可知,多线程的使用有利有弊,在软件开发中,到底需不需要用到多线程编程需要考虑很多因素,也需要结合程序功能的实际情况。一般情况下,多线程技术在项目开发中还是得到了广泛应用,因为在大多数项目开发中,多线程的优势还是明显大于劣势的。

[1]王艳平,Windows程序设计[M].2版.北京:人民邮电出版社,2008.

[2]章秦.Win32多线程同步技术浅析[J].电子设计工程,2011.

猜你喜欢

线程对象界面
神秘来电
国企党委前置研究的“四个界面”
攻略对象的心思好难猜
基于FANUC PICTURE的虚拟轴坐标显示界面开发方法研究
浅谈linux多线程协作
人机交互界面发展趋势研究
基于熵的快速扫描法的FNEA初始对象的生成方法
区间对象族的可镇定性分析
手机界面中图形符号的发展趋向
Linux线程实现技术研究