‘壹’ 多线程和单线程
今早读到王烁老师的文章谈多线程和单线程两种工作方式。
本以为老师想说可能是开启多线程模式的人会在工作、生活上全面碾压用单线程的人。因为多线程意味着可以同时处理很多事情,效率高嘛!别人花1小时做一件,我花1小时做三件,那怎么看都是我在同一时间段内完成的更多,收获的更多。拥有将时间折叠的能力,人生怎能不比单线程的精彩?
但读完老师的文章我发现,我这种想法也是刻板印象,照我这个逻辑,世世代代更新后,社会上怎么还会有单线程人存在呢?适者生存,两类人都有,无一被淘汰!
我自己就是多线程工作模式,大多数时候我都觉得这是我的优势,它给我掌控感,而掌控感带来安全感。可有些时候不得不承认,会被多线程所累。
就像王烁老师说的“多线程吃亏在有弹性。能同时处理几件事,那么多处理一件也无妨。能者多劳,既然你不怕被打扰,那就多扰一点。”
是啊!比如最近的工作,昨日上午两个半小时的工作时间里,我在同时处理着4-5件事情,不停地被周围同事呼唤、询问、扔工作到我背上。新人要带着干,领导交办的要急着干,一边电话正沟通着,另一边儿手机铃声已经响起了,然后桌边还有人排队等着......而屏幕上一早打开的那份待修改的方案,开头已经重读了三四遍,还一个字儿都没改,直到临近中午12点,才终于有了整片时间来处理。
一个头两个大,真感觉自己像个陀螺一样,谁都能给上一鞭子,要求我保持转动,别停下来。
太累了!
时间被撕碎成渣渣,而要把这些碎渣渣拼接起来,只能依靠我的大脑要提前为每件事儿留有冗余带宽。毕竟多线程并不是能同时处理多项事情,而是把事情拆分到多个时间段中,细看每个时间段也只处理一件事儿。
就像你想要同时吃草莓蛋糕和巧克力蛋糕,最佳策略不是同时将两块蛋糕都塞嘴里,而是吃一口草莓的,再吃一口巧克力的。头脑要留有余力去安排这一口吃啥,那一口吃啥,这就是冗余带宽。
突然觉得我的这种多线程方式其实也是在鼓励身边人不停地把工作扔给我,因为他们觉得我有能力HOLD住,所以也就扔的自然而然,理所当然了。而只有我自己知道我是干得有多么不情愿。
不再想重复上午的悲剧,下午我直接对临时插进来不是很重要和紧急的工作说“不”,然后找了间空会议室,躲了出去。
暂时抛开多线程,自主营造单线程空间,全身心地投入去做些自己喜欢的事儿,这样也不错。
‘贰’ 多线程一定比单线程效率更高吗
这个问题问的比较宽泛,如果说是否一定,答案是否定的,我大致说一下情况。另外目前最佳答案说的多进程不是多线程。
多线程并不一定快,尤其是在单核心或者CPU负荷较高的情况下,如果是纯粹计算,没有延时的操作,这是线程切换是需要时间的,不如单线程快。还有如果多线程设计不够好,就可能有访问冲突,加锁死锁等,这时候也肯定更慢。
计算机大多数情况下都是有延迟的操作,这个延迟一般人感觉不出,比如等待网络返回,访问磁盘IO,等待用户操作交互等,这时候使用多线程,明显提高效率。
总结:大多数情况下多线程更好,部分时候可能更差
‘叁’ 单线程和多线程的区别
多线程和单线程本质区别是:
(1)多线程的产生并不是因为发明了多核CPU甚至现在有多个CPU+多核的硬件,也不是因为多线程CPU运行效率比单线程高。单从CPU的运行效率上考虑,单任务进程及单线程效率是最高的,因为CPU没有任何进程及线程的切换开销,
(2)实际上,多线程的出现主要为了解决IO设备的读写速度往往比CPU的处理速度慢造成的单线程程序运行阻塞问题,一个极端的例子就是如果你需要用户在键盘上输入一个数据,当用户没有输入前,单线程程序就阻塞了,多线程程序就可以放个音乐或继续干一些程序中除了键盘输入外的工作,因此,多线程能提高因程序由于等待某个资源阻塞时其他资源的利用率(是利用率不是效率)。
(3)因此多线程与单线程的最大区别,多线程程序能在等待某个IO操作时,继续完成非这个IO的其他工作,有利于提高完成整个任务的效果和速度。此外,多线程程序与单线程程序对程序设计也有不同的流程和结构,多线程需要考虑对静态变量等资源的操作互锁及程序执行的同步问题。
‘肆’ 单线程和多线程测速哪个真实
多线程。多线程比较准,可以占用最大的带宽,测试出来比较准。多线程适用于复杂任务,并发任务,往往响应需要一定的时间,这时候通过调用多个线程,同时处理一些任务从而提高速度。
‘伍’ 剑三是单线程还是多线程好
多线程好。网3在运行的时候默认使用的线程是单线程,也就是只使用CPU的一个线程进行游戏,哪怕CPU有32个线程,剑网3还是只用了其中的一个,所以,修改线程数,可以让CPU得到更好地利用。多线段更好用。
‘陆’ 多线程与单线程的优缺点
单线程就是进程只有一个线程
多线程就是进程有多个线程
多线程处理的优点
同步应用程序的开发比较容易,但由于需要在上一个任务完成后才能开始新的任务,所以其效率通常比多线程应用程序低。如果完成同步任务所用的时间比预计时间长,应用程序可能会不响应。多线程处理可以同时运行多个过程。例如,文字处理器应用程序在您处理文档的同时,可以检查拼写(作为单独的任务)。由于多线程应用程序将程序划分成独立的任务,因此可以在以下方面显着提高性能:
多线程技术使程序的响应速度更快,因为用户界面可以在进行其他工作的同时一直处于活动状态。
当前没有进行处理的任务可以将处理器时间让给其他任务。
占用大量处理时间的任务可以定期将处理器时间让给其他任务。
可以随时停止任务。
可以分别设置各个任务的优先级以优化性能。
是否需要创建多线程应用程序取决于多个因素。在以下情况下,最适合采用多线程处理:
耗时或大量占用处理器的任务阻塞用户界面操作。
各个任务必须等待外部资源(如远程文件或 Internet 连接)。