并发编程概念篇

什么是并发编程啦,这貌似是一个很深奥的话题,其实并发离我们的生活很近,我们经常会并发的去做一件事情。我觉得要学好一件事情首先是要学会它的思想Learn its ideas;

了解并发之前,先分清楚进程和线程。进程就是指我们的程序所运行的一个个任务,比如我们要去玩一款叫做DNF的游戏,那么打开这个程序,肯定会有一个叫做dnf.exe的进程,例如我们登一个QQ也会有其对应的进程;


打开我们的任务管理器,可以去查看一个个进程的详细信息,我们关闭了一个进程,自然也会去关闭一个进程所对应的软件,但是一个软件有可能会对应多个进程,例如上图中我的电脑管家,就对应了3个进程,这样是比较耗内存的,所以就说腾讯管家确实没有360好。但是一个软件会有一个主进程,一般是以.exe为结尾的;

好了进程简单来说就是执行中的程序;

现在再来说一下什么是线程?

线程就是计算机程序中单独运行的一个流程,分支;例如我们打开了一个叫做dnf的游戏,系统会为它分配一个进程,而我们再玩游戏的时候肯定会有很多操作,比如去刷图,放技能,能听到声音,能看到怪在掉血。这些都是其进程内分出的线程来帮我们执行的,我们可以把线程理解为,比进程更小的子进程;另外线程也分为同步的和非同步的,同步的是指按照顺序往下走,这种运行效率比较低,因为他会一直占有CPU资源。而异步的运行效率比较快,因为他是多个线程同时执行。举个简单那的例子,例如一个公司正在研发一个项目,分为了三个小组,A小组负责前端,B小组负责后台,C小组负责移动端。那么我们说这三个小组就相当于三个线程,在我们早期开发的项目的时候也是按照顺序流来的,B小组后台开发完成之后,再给A小组开发前台,A小组前端开发完成后再交给C小组负责移动,这样的话时间就很长,影响了效率,如果三个小组同时开发的话,我们只需要定义好接口,定义好交接的时间,这样效率会快上一倍不止,所以这也是多线程的好处。

线程的优势?

1.发挥多核处理器的强大能力,过去的处理器一直都是单核的,而现在什么多核啊,八核啊之类的处理器都已经出来了,这就意味着,单线程已经根本无法满足我们的需求了,如果我们用一个多核处理器来处理单线程的任务,那么也就意味着我将有很多的资源没有取利用。另一方面,多线程可以同时在多个处理器上执行,如果设计正确的话,多线程程序可以通过提高处理器资源的利用率来提升系统吞吐量;

2.建模的简单性,通常的情况下,如果你去完成多个相同的任务,肯定要比你去完成单个不同的任务的效率要快的多,例如你要同时去修改12个Bug,这些bug可能是相关联的,修改起来效率也比较快,但是如果叫你去修改一个bug,然后再去面试,再去写新功能,再去辅导新人,那么肯定这样是比较耗时间的。而另一方面。完成多种任务需要在不同的任务之间切换执行,那么就需要管理任务的优先级和执行时间,这样将会带来额外的开销;

3.异步事件的简化处理:服务器应用程序在接收来自多个远程客户端的套接字连接请求时,如果为每个连接都分配其各自的线程,并且都使用同步Io那么这将降低之类程序的开发难度。

4.相应更灵敏的用户界面:当多个用户去点击一个同一个按钮的时候可能会去等待服务器给其他用户的相应,这样的用户体验度非常差,而使用了多线程之后,系统为每一个用户都分配一个线程,这样的相应会更加灵媒,更适合;

线程带来的风险?

线程就如同一把双刃剑一样的,使用的好,那么就很快捷方便,使用的不好那么会带来很多预料不到的错误,加大我们的开发难度;虽然Java提供了相应的语言和类库。以及一种明确的夸平台的内存模型,但是其问题还是非常显著的;

1.安全性问题:线程安全性可能是非常复杂的,在没有充足的同步情况下,多个线程的操作顺序是不可预测的,甚至会产生奇怪的结果。不过java也提供了同步机制和内容可见性的一些解决办法;

2.活跃性问题:在某个线程操作无法继续执行下去时,就会发生活跃性问题。在串行程序中,活跃性问题最好的表述就是无限循环。例如线程A正在等待线程B运行完毕从而释放资源,但是线程B一直在无限循环下去,那么线程A就会无限等待。我们可以通过死锁,饥饿,以及活锁来解决这些问题;

3.性能问题:运行多个线程势必会带来cpu的开销,当我们轮流执行多线程的时候,会去不停的切换线程,这种操作也会带来额外的开销,所以我们必须要向办法去解决这些问题;


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值