相信很多人都听过、这么几个概念:并发、并行、同步、异步、阻塞、非阻塞,但是这几个概念对于小白来说(比如我)很容易混淆,搜了几篇技术博客,现在特此总结一下。
并发:
我们常听说的高并发系统的并发,就是这玩意,并发的意思是:在一个时间段内,有几个程序在同一个cpu上运行,但是任意时刻只有一个程序在cpu运行(意思是:cpu在一个时间点只有一个程序运行,但是由于cpu切换运行速度之快,达到了1秒中上亿次。)
大白话来说:并发是一次处理很多事情,并发是在线程这个模型下产生的概念。并发表示同时发生了多件事情,通过时间片切换,哪怕只有单一的核心,也可以实现“同时做多件事情”这个效果。以利用有限的计算机资源使多个任务可以被实时或近实时执行为目的。
高并发:就说的是某一个段之内,能够响应用户响应越多,并发就越高。
并行:
在任意时刻点上,有多个程序同时在多个cpu上运行。并行才是我们通常认为的那个同时做多件事情,这个是实实在在的同时做多件事情,并不是像并发一样切换以达到效果。
大白话来说:并发同时运行了几个程序,那么那个时刻就有多少个cpu。以利用富余计算资源(多核CPU)加速完成多个任务为目的。这与多进程很相似。
同步、异步:
同步:代码调用IO操作的时候,必须等待IO操作完成才返回,这种调用方式叫做同步。简言之,同步意味着有序。
异步:代码调用IO操作的时候,不必等待IO操作完成才返回,这种调用方式叫做异步。简言之,异步意味着无序。
阻塞、非阻塞:
阻塞:调用函数的时候,当前线程会被挂起。
非阻塞:调用函数的时候,当前线程不会被挂起,会立即返回结果。
问题:
有没有觉得,同步、异步、阻塞、非阻塞意思相近?同步异步指的是消息之间的通信机制。阻塞非阻塞指的是函数调用的机制。
总结:
这几个问题好像是面试中常问到的,比如:面试爬虫,先理解后应用。题外话,其实Python3.6起,完善了asyncio这个异步库,结合aiohttp这个异步http请求的库,可以完成服务端的异步请求,当然还有其他库也可以完成。