前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【专业技术】如何搞定多线程?

【专业技术】如何搞定多线程?

作者头像
程序员互动联盟
发布2018-03-15 15:35:49
5520
发布2018-03-15 15:35:49
举报
文章被收录于专栏:程序员互动联盟
存在问题:

多线程在我们开发中比较常见的方式,如何搞定多线程呢?

解决方案:

1,为什么需要多线程? 因为现代的CPU运行速度很快,哪怕是一个简单的嵌入式芯片也远远快于以前的电脑速度,如果系统在运行时只能干一件事情,实际上是很浪费,所以人们就想到把CPU的执行分成一个个小的时间片段,把不同片段分给不同的指令,由于划分的时间比较短,给人的感觉就是多个程序在同时执行,这样大大提高了CPU的使用效率。比如一台典型的web服务器,要是只能一个程序跑,那就只能一个人去访问了,其他人都等在后面。要是给每个人一个小的时间片段,那很多人都可以同时访问。这样大家的总体效率就提高了,也提高了CPU本身的利用率。

2,为什么需要同步? 同步是由于多线程的出现而出现的,单线程的程序是没有同步和互斥的概念的。由于处理器能同时处理多个任务,所以有时候会出现任务之间有先后顺序的问题,比如打字的程序,要是键盘没有输入,屏幕是不会显示输入字符的,也就是说显示这个任务和输入接收任务之间有先后顺序,需要输入字符后,才通知字符的显示,所以这两个线程就需要同步了,其实这样的例子太多了,再比如网络数据接收,服务器只有在接收到相应的数据之后才会做相应的处理也是这个道理。

3,为什么需要互斥? 互斥同样是由于多线程的出现才引入的,很多情况下,多个任务需要对同一个数据对象进行操作,典型的就是一个电脑上的文件,理论上所有程序都可以打开它来进行读和写,那要是刚好有一个正在写,一个正在读该怎么办?会不会出现问题?要是没有互斥,一定会出现问题的。这个时候互斥就派上用场了,我们从字面意思就知道互斥就是相互排斥,也就是说我在操作的时候其他人都不要动,要动也是等我操作完了你再去动,也就是说使用过程中觉有排他性,系统就出现这种排他性的机制就是互斥。

4,同步和互斥是否相同? 很多人把这两者搞混,其实同步和互斥是不同的,同步强调的是一种执行的依赖性,往往跟顺序有很强的关系,而互斥强调的是独占性。同步机制往往可以用来做互斥使用,但反过来互斥是不能做同步的。所以使用情况关键是看两个任务之间是什么关系?如果有先后依赖,则用同步;如果是独占和排他关系,则使用互斥。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2015-12-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员互动联盟 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档