其实在前面我也介绍过了线程、进程以及线程与进程之间的区别,也练习过一些简单的进程、线程代码。今天主要学习了多线程编程,将自己的成果记录一下。
首先我们再弄清楚一下线程与进程之间的差别,以及线程有哪些优缺点:
有时使得一个程序看起来同时做两件事十分有用。一个经典的例子就是在一个文档上在编辑文本的同时进行实时的字数统计。一个线程可以管理用户的输入与执行编辑。可以看到文档内容的另一个线程可以持续的更新字数统计变量。前一个线程(或者是第三个线程)可以使用这个共享变量来提醒用户。另一个例子就是多线程数据服务器,当一个进程服务多个客户时,使用线程通过服务多个请求改善负载数据。对于一个数据服务器,透明的多任务在不同的进程是很难有效完成的,因为这要求锁,而数据一致会引起不同进程很难同步。这样的情况使用多线程要比使用多进程容易解决得多。
混合使用输入,计算与输出的程序通过将其作为三个独立的线程来运行,程序的性能会得到极大的改进。当输入或是输出线程等待连接时,另一个可以继续运行。所以,当程序最终只能一次只做一件事时,线程可以使得一个程序在等待连接时做一些有用的事。处理多个网络连接服务器程序就是适用多线程程序的一个例子。
通常而言,在线程之间进行切换对于操作系统的要求要比在进程之间切换小得多。所以,多线程比起多进程更少的依赖系统资源,这对于那些逻辑上要求在一个处理器的系统上有多个执行线程的程序更为实用。也就是说,编写一个多线程程序的设计困难是很大的,不应轻视。
线程的缺点:
编写多线程的程序需要小心的设计。引入潜在的时间错误,或是在一个多线程程序中未预料的共享变量引起的问题都需要考虑到。Alan Cox曾评价说,线程就是所谓的"如何同时射中自己的两只脚"。
调试多线程程序要比调试单线程程序困难得多,因为线程之间的交互非常难于控制。
将一个大的计算分为两部分并用作为不同的线程来运行这两部分在单处理器机器上并不见得会运行快,因为只有这么多的CPU周期,尽管并没有其他的程序在尝试运行,而且我们只有拥有多处理器或是超线程CPU,多线程的方法才会获得益处。
总的来说呢,多线程好处多多:例如:1)
提高应用程序响应。这对图形界面的程序尤其有意义,当一个操作耗时很长时,整个系统都会等待这个操作,此时程序不会响应键盘、鼠标、菜单的操作,而使用多线程技术,将耗时长的操作(time
consuming)置于一个新的线程,可以避免这种尴尬的情况。
2)
使多CPU系统更加有效。操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上。
3)
改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。
我所介绍的呢主要有以下几种:
1)基本的线程程序;
2)两个线程的同时执行;
3)信号量的使用;
4)互斥锁的使用;
5)一个简单的综合的例子;
好了,有了以上的概念以后呢,接下来的一篇就实践吧!
阅读(283) | 评论(0) | 转发(0) |