聊聊并发编程 猫头鹰表哥.

Slides:



Advertisements
Similar presentations
模板的使用 教育学 江西教育学院教育系 冯芳 2012 - 10. 第二章 教育学的产生和发展 第一节 教育学的研究对象和任务 第二节 教育学的产生与发展 第三节 学习教育学的意义与方法.
Advertisements

定 格 入 格 破 格 —— 新诗仿写复习训练 仿照下列句子,再把 “ 人生 ” 比喻成 “ 大海 ”“ 天空 ” , 造两个句子。 如果说人生是一首优美的乐曲,那么痛苦则 是其中一个不可或缺的音符。 参考答案: 1 、如果说人生是一望无际的大海,那么挫折则 是其中一个骤然翻起的浪花。 2 、如果说人生是一片湛蓝的天空,那么失意则.
實踐國中綜合活動. 我們的團隊 輔導 — 邱敏芳主任、洪穎馨組長、朱孝安組 長、徐維莉師、蔡嘉容師、蔡燕娟師 童軍 --- 蘇月琴團長、蔡盟玉師 家政 --- 阮雅倩師、李怡慧師、蔡佩瑩師.
用 藥 安 全 用 藥 安 全 護 理 師 張 嘉 芬. 前 言 前 言 正確用藥的方法 藥袋上的秘辛 為了減少重大疾病或是醫療處理、 用藥不當的相關事件發生。
阿尔伯特亲王 阿尔伯特亲王纪念碑 维多利亚女王夫妇 维多利亚女王一家 建造水晶宫 水晶宫初建时的照片.
3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
梦想启航 ——大学生活与职业规划专题讲座.
河北保定外国语学校 高三家长会.
《3-6岁儿童学习与发展指南》概述.
以信息化带动教育现代化,打造教育的“南山质量”
♥走馬瀨露營心得分享 二年七班 19號 鄭宜欣.
客家围龙屋 想知道梅州有哪些好吃好玩的吗?那接下来就让我带你去看吧!!GO。。。 梅州游乐篇.
个体税收征管政策讲解 浏阳市地方税务局.
C语言程序设计 李伟光.
封面 2015易驾考最新分享: 科目二考试方法秘诀 文章来源:易驾考官网.
基于行业的 企业技术创新信息保障体系研究 刘 华 博士 中国科学技术信息研究所.
教學經驗分享 吳毅成 國立交通大學資訊工程系 2012年4月.
第四讲 1949—1991年的中苏关系 及其经验教训.
“鼠标加水泥”的百货公司——武汉中百 朱巧巧 陆嘉怡 田泽宇.
合理控制索道游客流量 确保景区可持续发展 云南丽江玉龙雪山索道 陈加林 二0一五年十一月.
新竹二日遊 準備出發囉!!GO.
千里挑一的“征途” ——浅谈中国“国考”热.
研修4组 学习简报(第3期) 主编:左文玲 2015年2月7日.
颈椎移位.
多核体系结构与并行编程模型 计算机科学导论第八讲
102學年度預算編製說明會 主辦單位:會計室 102/02/22.
一、送貨的時間 二、驗收程序 三 、食材的驗收 四、驗收器材 五、驗收場所 六、驗收程序的評量 七、退貨的程序
飛天小女警遊縣警局.
主題樂園的開發評估與規劃.
復興國中95學年度生涯檔案製作簡介.
AOP实践 演讲人:陈思荣.
也許你很疑惑: 最近升官的同事,專業能力又沒你強! 情場得意的朋友,長的又沒你帥或美! 小曹要交新朋友,為什麼就是比較簡單!
第9课 北美大陆上的新体制 导入新课 新课教学 课堂小结 知识结构 巩固练习
Go语言就业指南 岳东卫 技术总监 讲师的CSDN博客地址
Kvm异步缺页中断 浙江大学计算机体系结构实验室 徐浩.
第6章 佇列(Queues) 6-1 佇列的基礎 6-2 佇列的表示法 6-3 環狀佇列 6-4 雙佇列.
OpenMP简介和开发教程 广州创龙电子科技有限公司
Applied Operating System Concepts
程序设计期末复习 黎金宁
2018/12/3 面向对象与多线程综合实验-网络编程 教师:段鹏飞.
第9章 多线程 王德俊 上海交通大学继续教育学院.
王豐緒 銘傳大學資訊工程學系 問題:JAVA 物件檔輸出入.
高级数据结构.
第一次课后作业 1. C/C++/Java 哪些值不是头等程序对象 2. C/C++/Java 哪些机制采用的是动态束定
自然科教學觀摩 教 學 者:黃藍萩 教學班級:3年9班 教學日期:
邹佳恒 第十八届全国科学计算与信息化会议 • 威海,
詩文的形成 有意義的字詞 句子 段落 一首詩文的形成,是由有意義的字詞組成句子,再由句子組成段落。
C/C++/Java 哪些值不是头等程序对象
JAVA 编 程 技 术 主编 贾振华 2010年1月.
複詞三胞胎(偏義複詞、同義複詞、反義複詞)
圖畫成語 Go !Go ! Go ! 遊戲說明.
第7章 進階的同步 觀念與實務.
信号量(Semaphore).
第二章 Java语法基础.
Review 1~3.
第二章 Java基本语法 讲师:复凡.
临界区问题的硬件指令解决方案 (Synchronization Hardware)
響應立法院親民黨團擴大舉辦向全民徵文 《若我有8800億,要怎麼改造台灣!?》
學生端 操作說明.
本节内容 Windows线程切换_时钟中断切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
降低食品安全風險 永得食品有限公司 營養師:林淑媛.
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
天澤堂兒童三色GO 高小級主日學 導師:李志誠 黃少華 2011年10月8日
方格紙上畫正方形.
所得稅法第14條、第126條修正條文 薪資所得計算方式二擇一 定額減除 特定費用減除 維持現行薪資所得特別扣除額20萬元減除方式
JAVA 程式設計與資料結構 第三章 物件的設計.
第2章 Java语言基础.
判斷(選擇性敘述) if if else else if 條件運算子.
作文教學--遊記篇 適用年級:五年級 教學者:鄭文娟老師.
第二章 Java基本语法 讲师:复凡.
Presentation transcript:

聊聊并发编程 猫头鹰表哥

现在是“多核”的世界

并发不等于并行(concurrent is not parallel)

i++ ? 并发、并行面临问题:资源竞争(resource contention) Thread_1 Thread_2 i = 0

怎么解决呢? 释放cpu资源等待(release cpu resource),我们知道操作系统(OS)有CPU任何 调度器,如果当前线程(或进程)释放计算资源时,会把当前上下文信息保存起 来,然后把资源让给下一个激活线程(或进程)使用。这本身是需要时间和空间 的。 自旋等待(spinning)不释放当前cpu资源,只是不停的轮询检查是否具备满足条 件。

真实世界可能更糟 CPU硬件,OS,编译器,或者VM虚拟机都会对执行代码指令优化执行顺序(不按 你代码的逻辑执行)

内存可见性(Memory Visibility)

Python and Java 解决方式 Java 内存模型,memory barrier, happe before voliatile Python GIL( Global Intercepter Lock)所有字节指令顺序原子执行 单核存在并发资源竞争吗? 在Python里,多线程是无用的? multiprocessor 利用多核

聊聊Spin Lock设计

CAS指令(Compare and Set) public class TASLock implements Lock { AtomicBoolean state = new AtomicBoolean(false); public void lock() { while (state.getAndSet(true)) {} } public void unlock() { state.set(false); getAndSet( ) 会通知 memory bus 广播所有 core 通讯,同步最新值。这样会导致虽然最终只有一个线程成功,但是其它线程会做无用的数据同步,性能低下。

双重检查(Double Check) public class TTASLock implements Lock { AtomicBoolean state = new AtomicBoolean(false); public void lock() { while (true) { while (state.get()) {}; if (!state.getAndSet(true)) return; } public void unlock() { state.set(false);

CLH Queue Lock java.util.concurrent.locks.AbstractQueuedSynchronizer

class Qnode { AtomicBoolean locked = new AtomicBoolean(true); } class CLHLock implements Lock { AtomicReference<Qnode> tail; ThreadLocal<Qnode> myNode = new Qnode(); ThreadLocal<Qnode> myPred; public void lock() { myNode.locked.set(true); Qnode pred = tail.getAndSet(myNode); myPred.set(pred); while (pred.locked) {} public void unlock() { myNode.locked.set(false); myNode.set(myPred.get());

未来是异步的 (Asynchron) Node整个单进程异步回调 风靡一时的Go及协程(Goroutines) Python3之后的协程语法加强(Corountine) 其实Java1.1就有了green threads

Go

Python Coroutine

Thanks and Question