linux多线程编程介绍

来源:互联网 发布:kc免费网络电话软件 编辑:程序博客网 时间:2024/06/08 01:00

linux多线程编程介绍

一、多线程定义

多线程一词可以解释为多个控制线程或多个控制流。虽然传统的UNIX 进程包含单个控制线程,但多线程(multithreading, MT) 会将一个进程分成许多执行线程,其中每个线程都可独立运行。

二、使用多线程的理由

       使用多线程的理由之一是和进程相比,它是一种非常"节俭"的多任务操作方式。我们知道,在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种"昂贵"的多任务工作方式。而运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间彼此切换所需的时间也远远小于进程间切换所需要的时间。据统计,总的说来,一个进程的开销大约是一个线程开销的30倍左右,当然,在具体的系统上,这个数据可能会有较大的区别。
  使用多线程 的理由之二是线程间方便的通信机制。对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过通信的方式进行,这种方式不仅费时,而且很不方便。线程则不然,由于同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其它线程所用,这不仅快捷,而且方便。当然,数据的共享也带来其他一些问题,有的变量不能同时被两个线程所修改,有的子程序中声明为static的数据更有可能给多线程程序带来灾难性的打击,这些正是编写多线程程序时最需要注意的地方。


三、多线程的优点(益处):

1、  提高应用程序响应

可以对任何一个包含许多相互独立活动的程序进行重新设计,以便将每个活动定义为一个线程。例如,多线程GUI的用户不必等待一个活动完成即可启动另外一个活动。这对图形界面的程序尤其有意义,当一个操作耗时很长时,整个系统都会等待这个操作,此时程序不会响应键盘、鼠标、菜单的操作,而使用多线程技术,将耗时长的操作(time consuming)置于一个新的线程,可以避免这种尴尬的情况。

2、  更有效地使用多处理器

操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上。

通常,要求并发线程的应用程序无需考虑可用处理器的数量。使用额外的处理器可以明显提高应用程序的性能。具有高度并行性的数值算法和数值应用程序(如矩阵乘法)在多处理器上通过多个线程实

现时,运行速度会快得多。

3、  改进程序结构

一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。

许多应用程序都以更有效的方式构造为多个独立或半独立的执行单元,而非整块的单个线

程。多线程程序比单线程程序更能适应用户需求的变化。

4、  占用较少的系统资源

如果两个或多个进程通过共享内存访问公用数据,则使用这些进程的程序可以实现对多个进程的控制。但是,每个进程都有一个完整的地址空间和操作环境状态。每个进程用于创建和维护大量状态信息的成本,与一个线程相比,无论是在时间上还是空间上代价都更高。

此外,进程间所固有的独立性使得程序员需要花费很多精力来处理不同进程间线程的通信或者同步这些线程的操作。

四、多线程的缺点:

1、           编写多线程程序需要非常仔细的设计。在多线程程序中,因时序上的细微偏差或无意造成的变量共享而引发错误的可能性是很大的。

2、           对多线程程序的调试要比对单线程程序的调试困难得多,因为线程之间的交互非常难于控制。

3、           将大量计算分成两个部分,并把这两个部分作为两个不同的线程来运行的程序在一台单处理器机器上并不一定运行得更快,除非计算确实允许它的不同部分可以被同时计算,而且运行它的机器拥有多个处理器核来支持真正的多处理。

参考资料:1、linux多线程编程手册(pdf)

2、http://blog.csdn.net/fjhyy/article/details/2985582

3、linux程序设计第十二章---posix线程。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 湖州奥体中心怎么办卡 学车把教练投诉了怎么办 白球鞋鞋边发黄怎么办 公务员体检时心跳过快怎么办 老人心脏跳得慢怎么办 银行月限额10万怎么办 跑步后迎面骨疼怎么办 跑步时迎面骨疼怎么办 爬了楼梯小腿疼怎么办 走路走太多小腿酸痛怎么办 微信转账月限额怎么办 运动后小腿骨疼怎么办 用单杠练腹肌晃怎么办 一跑步小腿就紧怎么办 小腿一跑步就痛怎么办 单杠屈臂悬垂身体摆动怎么办 脸上被打了紫了怎么办 王者荣耀队友太坑怎么办 大脸不想戴泳帽怎么办 脐带掉了有血怎么办 颈椎不小心扭了怎么办 遇不到合适的人怎么办 老爸不爱吃饭身体不好怎么办 小朋友在日本旅游生病怎么办 小朋友不吃饭装生病怎么办 带小朋友去苏梅岛生病了怎么办 练完舞蹈腿疼怎么办 过度运动后肌肉特别酸痛怎么办 锻炼把脚扭伤了怎么办 生完孩子变胖了怎么办 喝了啤酒肚子撑怎么办 小孩把口香糖吞进肚子怎么办 臂力器手柄坏了怎么办 30臂力棒掰不动怎么办 杯子盖子拧紧了打不开怎么办 深蹲以后腿软怎么办 小孩摔跤破皮了怎么办 手机qq账号密码忘了怎么办 刚满月宝宝喷奶怎么办 两个月的宝宝不爱吃奶怎么办 仓鼠走路画圈了怎么办