多线程、多进程、多核

前言

线程、进程的概念实际上已经纠结N久了,不过好在多少有些了解了,但总感觉还不是那么通透。
碰巧晚饭时与室友争论了一个问题,与线程的问题很类同,为了能通俗易懂的给室友讲明白,着实消耗了不少脑细胞。所幸最终他表示明白了(至于是真是假便不清楚了,不过至少我自己感觉通透了许多)。
鉴于抱着一颗开源共享的心,便稍加整理,拿来浪一下啦!

CPU

其实,CPU是个很笨的家伙,笨到只会做最简单的事,而且一次还只能做一件最简单的事,而它能做的所有的事掰着指头数来数去也就那么几件。多了、复杂了,抱歉,不会!

CPU仅会做的那几件事呢,就叫做CPU指令

虽然CPU这家伙很笨,但还是有优点的,而且这优点还很让人喜欢。什么优点呢?

时间片

虽然CPU只会那么几个指令,但是已经够了,因为那些复杂的事都可以用这些指令进行排列组合来完成。所以啊,CPU一点儿也不怕麻烦。

由于CPU干活又快又准,所以很多事都可以让他来做。但是CPU这小了实在是太傻愣傻愣了,为了防止这傻小子闷着头只顾做手头上的事,把其它事都抛到了脑后,就有个头脑还算灵光的家伙跑来指挥CPU,这个家伙就是操作系统(更准确的说是分时操作系统),也叫OS

OS规定CPU做一件事只能用一小段时间(这一小段时间就叫时间片),而且时间到了必须放下手头的事,去做下一件事,不管手头上的事有没有做完。事实上OS把每一件事的进度都记录了下来,下次轮到这件事时就让CPU接着原来的进度继续干下去。

由于CPU干活实在是太快太快了,所以感觉就像同时在做所有安排给他的事。

进程&线程

不管是进程还是线程,其实都是任务。任务也分大小的,一个大任务可以包含若干小任务,而且一个大任务至少要有一个小任务。一个大任务就是一个进程,一个小任务就是一个线程

把这些任务交给OS,OS就根据情况做规划,给每个任务分配合理的时间片,然后安排CPU来完成。

单线程&多线程

一个大任务只有一个小任务,那这个大任务就叫做单线程,否则就叫多线程

举个栗子:

  • 小明在唱歌,而且在唱歌是其它的事都不做。这就是单线程
  • 小明一边唱歌,一边跳舞。这就是多线程
  • 小明一边唱歌,一边吃饭。这也是多线程,只不过这两个小任务都用到了嘴巴,所以执行起来就会麻烦很多,解决麻烦的办法就是线程同步

多进程

直接举栗子:

  • 小明自己放风筝。这就是单进程
  • 小明和小红都在放自己的风筝。这是一种多进程,只不过两个进程是独立的。
  • 小明和小红一起放大蜈蚣风筝。这是另一种多进程,进程之间需要配合,也存在类似多线程的麻烦。这方面的问题没有详细了解过,就不多扯了。

多线程&多进程

再次举栗子:

  • 小明一边唱歌,一边跳舞。这是多线程,用的都是小明的身体(资源)。
  • 小明唱歌,小红跳舞。这是多进程,各自用各自的身体(资源)。
  • 小明和小红合唱。这也是多进程,各自用各自的身体(资源)。

多核

单核、多核是针对CPU来说的。

继续举栗子说明:

  • 普通人。单核
  • 哪吒。多核

如有不对之处,还望大侠指正!

猜你喜欢

转载自my.oschina.net/u/209067/blog/1795376