你没猜错✿✿,做菜之前先去下一份菜谱✿✿,照着菜谱一步步来✿✿:起锅烧油✿✿、葱姜蒜末下锅爆香✿✿、倒入切好的食材✿✿、大火翻炒✿✿、加入适量酱油✿✿、加入适量盐✿✿、继续翻炒✿✿、出锅喽✿✿!
火候有点过✿✿,酱油加的有点少✿✿,盐加多了✿✿,中餐里的“火候”以及“适量”是最为神秘的存在✿✿,可以意会不可言传✿✿。因此相对肯德基麦当劳之类的标准工业品✿✿,中餐更像是艺术✿✿。每个人炒出来的菜味道都不一样✿✿,显然嘛✿✿,每个人对火候以及适量的理解是不一样的✿✿。
从操作系统的角度讲当CPU切换回用户态后✿✿,CPU执行的一段指令就是线程✿✿,或者说属于某个线程
这和炒菜一样✿✿,我可以按照菜谱抄鱼香肉丝✿✿,那么炒菜时这就是鱼香肉丝线程✿✿;我可以按照菜谱抄宫保鸡丁✿✿,那么炒菜时这就是宫保鸡丁线程✿✿。
厨师个数就好比CPU核心数✿✿,炒菜的样数就好比线程数✿✿,这时我问你必发(888·China)✿✿,你觉得厨师的个数和可以同时抄几样菜有关系吗?
单个核心上可以跑任意多个线程✿✿,只要你的内存够就行✿✿;计算机系统内也可以有任意多核数✿✿,只要你有钱就行✿✿。
很久很久以前✿✿,计算机一次只能执行一个任务✿✿,你不能像现在这样在计算机上一边看电影一边在下小电影✿✿,哦✿✿,不对✿✿,一边写代码香艳迷醉香艳迷醉✿✿,一边下载资料✿✿。
你CPU不是只知道执行机器指令吗?很好必发(888·China)✿✿,那我操作系统就通过修改你的PC寄存器✿✿,让你CPU执行A任务的机器指令一段时间✿✿,然后下一段时间再去执行B任务的机器指令✿✿,再然后下一个时间段去执行C任务的机器指令
CPU不知道执行的某一段机器指令属于A任务还是B任务香艳迷醉✿✿,只有操作系统知道✿✿,同时操作系统还能知道任务A和B任务是否属于同一个
如果属于同一个地址空间✿✿,那么任务A和任务B就是我们熟悉的“多线程”✿✿;如果不属于同一个地址空间✿✿,那么任务A和任务B就是我们熟悉的“多进程”✿✿,现在你应该明白这两个概念了吧✿✿。
值得注意的是✿✿,计算机系统还在单核时代就已经有多线程的概念了✿✿,我们之前说过香艳迷醉✿✿,即使是单核也可以执行多个线程✿✿,那么有的同学可能会有疑问必发(888·China)✿✿,在单核的系统中开启多个线程有什么意义吗?
假设现在有两个任务✿✿,任务A和任务B✿✿,每个任务需要的计算时间都是5分钟✿✿,那么无论是任务A和任务B串行执行还是放到两个线程中并行执行✿✿,在单核环境下执行完这两个任务总需要10分钟香艳迷醉✿✿,因此有的同学觉得单核下多线程没什么用✿✿。
假如你的程序带有图形界面✿✿,某个UI元素背后需要的大量运算✿✿,这时为了防止执行该运算时UI产生卡顿✿✿,那么可以把这个运算任务放到一个单独的线程中去必发(888·China)✿✿。
因此如果你的目的是防止当前线程因执行某项操作而不得不等待✿✿,那么在这样的应用场景下香艳迷醉✿✿,你根本就不需要关心系统内是单核还是多核以及有多少个核✿✿。
如果没有线程✿✿,那么执行阻塞式I/O时整个进程会被操作系统暂停✿✿,但如果你开启两个线程✿✿,其中一个线程被阻塞时另一个线程依然可以继续向前推进✿✿。
尽管采用多进程也可以充分利用多核✿✿,但毕竟多进程编程是很繁琐的✿✿,这涉及复杂的进程间通信机制✿✿、进程间切换的较高性能损耗✿✿、进程间内存相互隔离带来的对内存消耗等✿✿。
线程这个概念很好的解决了上述问题✿✿,开始成为多核时代的主角✿✿,要想充分利用多核资源✿✿,线程是程序员的首选工具✿✿。
threads are for people who cant program state machines
“线程是为那些不懂状态机的人准备的”✿✿,这句话在单核时代有它的道理✿✿,因为在单核时代✿✿,所有的任务都不是在同时向前推进必发(888·China)✿✿,而是“交错”前进✿✿,A前进一点✿✿,然后B前进一点✿✿,线程并不是实现这种“伪并行”唯一的方法✿✿,状态机也可以✿✿。
但在多核时代✿✿,这句话就不再适用了✿✿,对于大多数程序员来说多进程多线程几乎是充分利用多核资源的唯一方法✿✿。
如果你的线程是不涉及任何I/O✿✿、没有任何同步互斥之类的纯计算类型✿✿,那么每个核心一个线程通常是最佳选择✿✿。但通常来说✿✿,线程都需要一定的I/O✿✿,可能需要一定的同步互斥✿✿,那么这时
增加线程可能会提高性能✿✿,但当线程数量到达一个临界值后性能开始下降✿✿,这时线程间切换的开销将显著增加✿✿。
线程数和CPU核心数可以没有任何关联✿✿,如果在使用线程时仅仅针对上述提到的几个简单场景✿✿,那么你根本不需要关心CPU是单核还是多核✿✿。
但当你需要利用线程充分发挥多核威力时✿✿,通常情况下你创建的线程数与核数要保持一种线性关系✿✿,最佳系数通常需要测试才能得到✿✿。bifaVIP认证✿✿,88BIFAAPP官网✿✿,88BIFA✿✿!必发888官网