并发编程中的一些基本概念

技术背景

Concurrency and Parallelism

Concurrency:并发是指任务之间可以并发执行,但是这并不能确保任务都在执行,它们之间很可能是交替执行的。 可并发说明两个任务之间不需要共享状态,或者没有因果依赖关系
Parallelism:并行产生于多核计算机中,指两个任务在两(或以上)个CPU中同时执行。

并发是同一时间应对多件事情的能力;并行是同一时间动手做多件事情的能力。

举例:六大门派围攻光明顶,张无忌献身解围,当场放下豪言:六大门派,有和怨气可找我张无忌发泄。
所有在场的六大门派之人本来是可以一块向张无忌讨教的。但是,顾忌自己是名门正派,决定和张无忌一一单挑。打了半晌,明教白眉鹰王内气恢复,过来帮忙。六大门派见张无忌多了帮手,立马再派一人挑战。张无忌好比是CPU,六大门派好比是待处理的任务,谁先去和张无忌讨教都行,这时并发的。但是张无忌一次只能和一个人过招。当白眉鹰王上去帮忙之后,他们可以同时应对两人了。同时迎战的两人是并行的。

Asynchronous and Synchronous

Asynchronous:如果一个函数或者API是异步的,那么当我们调用这个函数或者请求这个API时,不用等到函数或者API返回,发送请求完成即可完成。
对于函数我们可以通过注册回调函数,当方法执行完毕时执行回调函数。
Synchronous:同步是指必须等到函数或者API执行完毕得到返回结果。

Blocking and Non-blocking

Blocking:当多个线程共享同一资源的时候,如果某个线程占有资源迟迟不释放则其他线程都会被阻塞。例如,一辆地铁进站后迟迟不出站则其它地铁都
被阻塞。在一段代码逻辑中如果某一段需要访问文件系统,或者请求外部API,这些一般都是耗时的请求,在它们执行完毕之前,后续逻辑都被阻塞。
Non-blocking:上边说到的阻塞的情况都会导致线程挂起,但是无阻塞不会产生线程的忙等。当线程试图请求资源时,应立即返回是否获取的状态。在代
码逻辑中呢,我们就可以通过异步的方式处理耗时的操作,注册回调函数,或者发送消息。

同步异步指的是一种协作方式;而阻塞和非阻塞指的是协作过程中出现的状态。

举一个"小王到书店买书"的例子:
一天,小王想要买一本编程书自学编程,于是来到了老王的书店。"老王,你这里有最新出版的《21天精通XXX》吗?"。于是发生了如下场景:

  1. 老王答道,"有,有,有,你稍微等一下,我给你找找"。两个小时之后老王终于找到了这本书,小王掏钱带书回家了。
  2. 老王答道,"有,有,有,你稍微等一下,我给你找找"。小王说,"行吧,你先找着,我去外边撸会串儿"。期间小王不时的去店里看看老王找到书没有。两个小时之后老王终于找到了这本书,小王掏钱带书回家了。
  3. 老王答道,"有是有,不过你得给你找找,要不你先到外边撸会串儿,等找到了叫你"。小王说,"没事,我等着你吧老王"。两个小时之后老王终于找到了这本书,小王掏钱带书回家了。
  4. 老王答道,"有是有,不过你得给你找找,要不你先到外边撸会串儿,等找到了叫你"。小王说,"好啊,等你找到了叫我"。两个小时之后老王终于找到了这本书,小王掏钱带书回家了。

场景1, 2, 3, 4分别对应:同步阻塞,同步非阻塞,异步阻塞,异步非阻塞。

在这个场景中,老王提供的卖书行为是一种同步或异步的协作方式;而小王等书的过程具有阻塞或非阻塞的状态。我们再为上述例子添加两个场景:这是小张过来买书了:"老王,你这里有最新出版的《7天精通XXX》吗?"

  1. 老王答道,"有,有,有,你先在小王后边排队等一会我给小张找完之后再给你找"。四个小时之后老王终于找到了这本书,小张掏钱带书回家了。
  2. 老王答道,"有,有,有,不过你得给你找找,要不你先到外边撸会串儿,等找到了叫你"。小张说,"好啊,等你找到了叫我"。两个小时之后老王终于找到了这本书,小张掏钱带书回家了。

同于同步的方式,当小王处于阻塞状态时,小张也必须阻塞,直到小王把老王"释放"出来。对于异步的方式,小张则不需要等待(意味着没有阻塞),等老王找到了直接去取就OK了。

Deadlock:是指两个或两个以上的进程(或线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。
Starvation:饥饿是指在多线程环境下,调度算法总是使某些线程总是无法得到资源,使其长时间处于等待状态。
Live-lock:活锁是指两个线程在得到资源时都想让对方使用资源,导致双方都无法使用资源。

Race Condition:在多线程环境中,多个线程需要同时修改某一状态,由于没有对该共享状态加锁,不能保证每个线程进入顺序,因而产生Race Condition。

无锁算法:
Wait-free:是最有效的保证。每一次请求都在有限步骤内执行完成。
Lock-free:绝大多数都在有限步骤内完成,可以确保没有死锁,但是不能确保饥饿。
Obstruction-free(无干扰):一个方法在某一个时间点是隔离其他线程独立执行的

http://www.zhihu.com/question/19732473
http://www.cnblogs.com/ktgu/p/3529143.html
http://en.wikipedia.org/wiki/Non-blocking_algorithm

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

推荐阅读更多精彩内容