关于多线程的思考

当准备编制程序完成某项较为复杂的事情时,一般面临这样几种情况。

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

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

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

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

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


在unix高级编程11.16图中的程序,利用barrier,建立8个线程来分解处理一个大量数据的排序,在多cpu的硬件环境中,可以大幅提高计算效率。这种情况就充分利用了多线程可以共享存储的特点。如果是用多进程来做这件事,可能就无法达成这样的效果。因此,多线程这种编程模型,必然尤其特别适合的应用场合,大体就是,各个任务相对独立,但有较大的资源共享要求,此时多线程模型就比较合适。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值