多线程、多进程、多核

前言

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

CPU

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

CPU仅会作的那几件事呢,就叫作CPU指令线程

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

时间片

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

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

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

因为CPU干活实在是太快太快了,因此感受就像同时在作全部安排给他的事。同步

进程&线程

无论是进程仍是线程,其实都是任务。任务也分大小的,一个大任务能够包含若干小任务,并且一个大任务至少要有一个小任务。一个大任务就是一个进程,一个小任务就是一个线程it

把这些任务交给OS,OS就根据状况作规划,给每一个任务分配合理的时间片,而后安排CPU来完成。多进程

单线程&多线程

一个大任务只有一个小任务,那这个大任务就叫作单线程,不然就叫多线程

举个栗子:

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

多进程

直接举栗子:

  • 小明本身放风筝。这就是单进程
  • 小明和小红都在放本身的风筝。这是一种多进程,只不过两个进程是独立的。
  • 小明和小红一块儿放大蜈蚣风筝。这是另外一种多进程,进程之间须要配合,也存在相似多线程的麻烦。这方面的问题没有详细了解过,就很少扯了。

多线程&多进程

再次举栗子:

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

多核

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

继续举栗子说明:

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

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