您的位置:首页 > 其它

关于多线程的思考

2015-04-05 07:01 183 查看
当准备编制程序完成某项较为复杂的事情时,一般面临这样几种情况。

一是在单进程单线程的情况下设计程序,这个程序可能不得不在在单个执行流中处理如用户交互,数据计算,外设访问等不同类型的任务,使得各种任务的处理互相牵制,导致程序设计复杂且运行效率较低。这种情况在早期的os只支持单进程单线程时必须面对。

二是在多进程单线程的情况,此时可以将不同类型的任务分配到多个进程,简化程序设计,提高运行效率。不过由于多进程之间共享信息和相互通信的低效率,会降低程序运行的效率。不过,多进程具有故障隔离,多个任务之间不互相影响的好处。

三是采用单进程多线程的设计,此时可以把不同类型的任务分配到多个线程,由于多个线程可以共享进程资源,效率较之多进程要高,但是多线程访问共享资源需要注意一致性问题,且线程之间会互相影响,如踩踏对方的内存,造成问题定位的困难。

后两种方式在多cpu环境,会提高程序运行的效率。即使在单cpu环境下,后两种的效率也会高于第一种。

这几种方式各有利弊,对于简单的事情,可以采用单进程单线程的方式做,如一些单片机小程序,此时也需要具备面对此种情况的设计能力。而对于复杂的事情,可以根据程序的运行环境,对可靠性/性能等不同质量属性的设计考虑权重,来确定采用上面的那种设计方式。应该说,多种方式可供选择,增加了程序设计的灵活性,是我们软件人员的好事情。

在unix高级编程11.16图中的程序,利用barrier,建立8个线程来分解处理一个大量数据的排序,在多cpu的硬件环境中,可以大幅提高计算效率。这种情况就充分利用了多线程可以共享存储的特点。如果是用多进程来做这件事,可能就无法达成这样的效果。因此,多线程这种编程模型,必然尤其特别适合的应用场合,大体就是,各个任务相对独立,但有较大的资源共享要求,此时多线程模型就比较合适。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: