您好!欢迎光临光头强钣金加工设备有限公司
 ※ 返回首页 ※ 联系我们  ※ 在线留言
钣金加工一站式制造供应商
设计定制、生产加工、整机装配、设备接线
客户咨询服务热线:
13988888888
热门搜索: as  a href=_1__2_/a  a href=12/a  www.ymwears.cn
公司新闻
您的位置: 主页 > 新闻中心 > 公司新闻 > 崔熙怎么理解多线程为什么要用多线程?

崔熙怎么理解多线程为什么要用多线程?

作者:admin    发布时间:2020-11-26 05:35     浏览次数 :


  我一直对多线程这个不是特别了解,虽然我知道怎么用(就是怎么去使用),但我不懂为什么要用多线程,可能我有点死脑筋,绕不出来。我这里说一下我的理解,不知道对不对,比如一个程序走下来,走到某个地方,需要去调用某个方法(或者执行某个操作),调用这个方法不需要有返回值,如果这里不是用多线程的话,是不是程序就会等那个方法执行完了,再执行接下来的代码,但是如果用这里使用多线程的话,是不是可以另外起一个线程去完成这个操作,主程序不需要等待那个方法执行完,就可以继续走下去。是这么理解吗?另外一个问题,还是上面的例子,如果调用的方法有返回值的,那么是不是就不能起另外一个线程,因为你必须要等待返回结果程序才能继续走下去,所以这里另起一个线程意义并不大。我这么说如果能看懂的话,大家请给我点答复,谢谢

  你好,csdn有篇文章转门解释这个问题。题目是,“为什么要使用多线程”。我简单的说,多线程一是为了模拟多人同时操作,比如多个售票员同时卖火车票,程序怎么写?只能用多线程啊。你说的那个问题,要去研究另外一个概念叫做阻塞式io和非阻塞式io,linux包括android系统,windows系统,都是阻塞式io。非阻塞式io很少。阻塞式io中,操作系统会将耗时线程阻塞,有的文章说的是os将线程挂起,是挂起还是阻塞,不纠结这个。线程阻塞之后,cpu就会执行其他线程。我举个例子,主线程需要客户数据,主线程不可能自己去拿,因为主线程要负责显示等待圆圈动画,就是我们经常看到视频加载之前的那个圆圈圈,如果主线程去拿数据了,这是客户点击屏幕没有反应,也不显示转圈儿,客户就会开骂。所以必须子线城去拿。数具量很大,子线一时半会儿拿不到数据,os会讲子线城阻塞,执行其他等待线程,比如用户输入。子线挂起之后,硬盘读取数据完成,将数据送到总线接口处,cpu指挥内存加载数据,内存加载数据完成。os会通知子线程重新开始运行,子线城加载数据成功,返回给主线程,主线程关闭圆圈。every thing is over。

  这个话题比较大,先mark一下,后面会写篇文章细致讲述

  多线程就类似N个工人『同一时间』去干同一件事情,比一个人『同一时间』去干快N倍。简称多线程并发执行,这个『同一时间』我的理解是同一秒里面,cpu在这一毫秒执行了A线程,然后下一毫秒执行挂起A线程,执行B线程,然后这样交替直到两个线程都执行完,就是并发结束。

  回答你的问题:如果你这一步逻辑异步处理是可以接受的(譬如用户浏览了这篇文章,另起一个线程异步执行浏览量+1),就可以这么做。不一定看有没有返回值来定义。如果你需要这个方法的返回值来执行下面的逻辑,然后这个方法里面是执行一些无状态任务的,你也可以在这个方法里面用多线程去并发去做这些任务,效率会更高。

  个人愚见。。。有错可纠正

  现在的科技发展日新月异,手机的CPU都开始十核心十二核心往上走了,但是人类似乎还是单线程,没有办法一边做题一边吃鸡啥的。为啥人脑就不能裂变出多核心的机制呢?这样子说不定一个人能够胜任几样事情。

  在之前的《最强大脑》里面,脑科学和各种各样的记忆迷宫,快速识别操作,让人觉得眼界大开,脑子的奥秘可能人类对她的了解并不会比海底知道多少。如果能够解开这么深的奥秘,什么博金森综合,中风这种问题都会迎刃而解。

  平时我们总会心想心心念,但这里的心只是表面的心,和心脏一点关系都没有,主要还是靠这个脑子。人脑虽然不是世界上最重的大脑,也不是身体比重占比最大的动物,根据以往数据,世界上最重的大脑高达2公斤,而这个人却是个痴呆患者,无法正常思考。所以脑的重量,也不是最关键的因素。

  从我们的经验来看,大脑是可以处理多任务的,比如我们可以一边洗澡一边听歌还能跟唱,一边做吃的一边还能看一下热门的都挺好,做出来的东西还不差。在相对宽松的情况下并发多个任务,ABC互不干扰甚至还有促进效果。在我们接受信息比如听音乐的时候,我们往往也会在思考,并不是说我们接受就是被动接受了,所以这也是一个任务的触发。

  如果是涉及到比较精密的操作,比如高空作业,或者是设计手绘造轮子,这个时候去插入其他的任务同时进行很可能就是事倍功半的,结果两样都没有做好。在日常工作中,为什么我们要列list,为什么要提交需求列表,就是为了能够将事情有条不紊安排下来,而不是乱加功能,才能在关键的时候随机应变,提升处理事情的效率。

  简单的事情,我们自然可以三心二意,崔熙这个是我们大脑的出厂设定就有的东西。

  复杂的精密作业,我们可能还是要一样一样来,不能同时多线程进行,不然你试试在别人数数的时候打断一下插几个素数进去?

  复杂的任务并非不能多线程同时进行,而是需要长时间的训练和兴趣,我们也能从一些达人身上看到左右手同时作画并且还做得挺不错的,这些都是需要扎实的基本功才能做到。

  人脑和计算机差不多,计算机需要的是更健壮更高效的代码去执行多线程操作,这个和硬件配置并不是绝对的关系,和优化却是息息相关。欲穷千里目,此事要躬行。

  这么理解吧,假设你正在追一个女生。

  某天晚上,你给她发了一个消息,过了一分钟之后,她回了你一个表情包【微笑脸】。你很开心,你觉得她正在跟你聊天。

  你又给她发了一个消息,过了一会她又回复你消息了,你觉得自己追到她很有希望。

  而事实是,在回复你消息之前,她分别给她正在追的男生发了三条消息,让后又给备胎1,备胎2,备胎3...分别回复了一个表情包或一个“哦”,“嗯呢”,然后才轮到你。

  而这些,你都是不知道的,其他人都是不知道的,所有的人都以为她只在和自己聊天,因为她回复消息很“及时”。只要她速度足够快,她能骗过每一个人。

  这就是恋爱过程中的多线程,理解了吗?

  至于计算机中的多线程,道理也是一样。因为计算机运算速度很快,而且采用的时间片技术和各种调度算法,可以保证每个程序都能得到执行,时延非常短,我们是感觉不出来的。比如几个程序在一秒钟之内就轮换执行了200多次,我们只会以为每一个程序都是没有被中断过的,是单独一直在执行的。

[返回]