并发 并行 同步 异步 多线程 阻塞 非阻塞

前言

最近iOS开发群里兄弟们讨论网络层这块的东西比较多,问题主要集中在请求、线程、队列这几块。中途发现对并发、异步、多线程等这些概念有一定的误解,特写此篇文章以作阐释。

这篇文章就主要会讲这些方面:
  1. 几个概念的字面意义
  2. 几个概念的详细理解
  3. 总结

几个概念的字面意义

  1. 并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。

  2. 并行:一组程序按独立异步的速度执行,不等于时间上的重叠(同一个时刻发生)。

  3. 同步:指两个或两个以上随时间变化的量在变化过程中保持一定的相对关系。

  4. 异步:异步双方不需要共同的时钟,也就是接收方不知道发送方什么时候发送,所以在发送的信息中就要有提示接收方开始接收的信息,如开始位,同时在结束时有停止位。

  5. 多线程:是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。

  6. 阻塞:是指程序调用结果返回之前,当前线程会被挂起(线程进入非可执行状态,在这个状态下,CPU不会给线程分配时间片,即线程暂停运行)。函数只有在得到结果之后才会返回。

  7. 非阻塞:指在不能立刻得到函数运行结果之前,该函数不会阻塞当前线程,而会立刻返回。

几个概念的应用领域

以上几个概念的字面意思请大家看上三遍。然后按照字面意思来个配对。

  • [并发、并行]
  • [同步、异步]
  • [阻塞、非阻塞]
  • 多线程

并发

并发大家肯定平时经常提及,不管是app、web server并发无处不在。仔细看上面并发的字面意思,是指一个时间段内多个程序(任务)同时处于运行活动状态,而不是在某一个时间点上都处于运行状态。参与并发的程序(任务)都是串行执行的,所以不存在同时刻执行多个程序(任务)的情况。那问题来了,为什么咱们平时编码的过程中发现多个任务都是同时执行的呢?因为有系统时间片轮转的参与,操作系统通过将cpu的执行时间分割成多个时间片,为每个程序(任务)分配时间片,因为cpu处理速度很快,这样就有了看起来好像每个任务都在同时执行的宏观感受,感觉有多个cpu,但本质上一个时间点只有一个程序(任务)在运行。


con.png

并行

而相对并发,并行可能陌生了不少,或许咱们还会会当做同一个概念来理解。虽然并行有和并发相同的外部特征,但是内部实现是不一样的。而且并行的原理也比并发简单,笼统的说就是套物理硬件的堆砌来实现,通过增加cpu核心来实现多个程序(任务)的同时进行。是的,是并行做到了多任务的同时执行。

par.png

同步

在多个逻辑调用间有一定的时间关系,就好比拿出钥匙才能去开门。前一个逻辑调用的输出作为第二个逻辑调用的输入,后一个逻辑调用必须等待前一个调用执行完才能开始调起执行。这个很好理解。

异步

正好与同步相反,后一个逻辑调用无需等待前一个逻辑调用执行完毕。也就是说前一个逻辑调用发起后就直接返回了,并没有输出,而是在调用执行完成后通过状态、通知来通知调用者,或通过回调函数处理这个调用。


阻塞

是指调用输出之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。

非阻塞

指在不能立刻返回调用输出之前,该调用不会阻塞当前线程。


多线程

线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。在我看来,线程就是程序(任务)的执行载体,多线程则是并发的具体逻辑实现。所以,多线程就是并发,这个观念是错误了,两个领域的东西,这个不难理解。


总结

此刻大家应该能区分并发和并行了吧。对于并发和并行理解停留在概念阶段就可以,具体系统层面如何实现,只需了解即可。比较形象的比喻就是单车道和多车道。除去并发和并行,其他几个概念都是我们平时编码过程中经常用到的。多线程刚才说了是并发的代码逻辑实现,同步和异步是指逻辑调用方式,而阻塞和非阻塞则主要强调逻辑调用当前的状态。有同学可能会问并发和同步、异步有什么关系吗?明确的说没有关系,完全是两个领域的东西。也有同学会认为异步就是多线程,仔细看上面的解释,相信一定能明白。在开发过程中完全可以把并发和并行两个概念抛到脑后,因为修改并发和并行是靠修改系统层面配置或者提升硬件来解决,对于应用开发者,无需关心。

好了,现在再去看AFNetworking的源码,你是不是能理解AFNetworking处理多个请求只用了一个线程,给我们的感觉却是多个请求同时处理的呢?

废话有点多,大家勿喷啊,不对的地方希望能够帮忙指正(包括行文方面的问题)。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容