golang语言并发编程核心理念
一、并发编程综述 并发编程的含义,基于独立程序的(多线程编程),一台计算机(多进程编程),基于一个网络(分布式计算)
二、并发编程基础 并发编程思想来源于多元程序(多任务)操作系统。多任务操作系统允许同时运行多个程序。 单任务操作系统中,任务是被一个接一个的读取,处理并运行的。各个任务的执行完全串行 。
三、串行程序与并发程序 串行程序指 一个只能被顺序执行的指令列表。 并发程序指 被并发执行的俩个以上的串行程序的总称,允许串行程序运行在一个或多个cpu上,叫多元程序。 多元程序由操作系统内核支持并提供多个 串行程序复用cpu的方法。叫多元处理。 多元处理指 计算机的多个cpu共用一个内存,同一时刻多个串行程序分别运行在不同的cpu上。
四、并发程序与并行程序 并发程序指可以被同时发起执行的程序。 并行程序指可以被同时运行在多个cpu上的并发程序。
五、并发程序与并发系统 并发程序属于程序,包含多个模块,模块之间紧密关联,可以在概念上看作是一个整体。 模块之间可以通过协议通信,并且是松散耦合的。可以看作是一个系统。 并发系统可能是并行的,多个模块可以同时在不同的硬件上运行。
六、并发程序的不确定性 串行程序的所有活动是有先后顺序,固定的。 并发程序中的活动是部分有序,其余部分的活动顺序没有明确指定。即不确定性。 不确定性 导致了 并发程序的每次运行的活动执行路径是不同的。
七、并发程序内部的交互 并发程序包含多个模块,每个模块可以看作是一个串行程序。 串行程序之间可能存在交互的情况,如串行程序对一个共享的资源进行访问。如相互之间传递数据。 串行程序之间的交互,要求我们协调他们的执行,就涉及到了同步。 同步的作用是避免并发访问共享资源(临界区)时可能存在的冲突。 同步的原则,程序在使用共享资源,要先请求资源 并获得访问权限。当程序不在使用时,应该释放该资源。程序对资源的请求不应该导致其他正在访问该资源的程序中断。 传递数据,属于并发程序内部的通讯。协调内部通信的方式除了同步还有异步 异步指数据不加延时的把数据发送给对方,即使数据的接收方还没有做好准备。
八、多进程编程 进程间通讯,叫ipc(interprocess communication) 基于通讯的ipc方法 以数据传送为手段的ipc方法 管道(pipe),管道可以用来传送字节流。 消息队列(queue),消息队列可以传送结构化的消息对象。 以共享内存为手段的ipc方法 以共享内存区的方法 基于信号的ipc方法 操作系统的信号量机制(signal),是唯一一种异步的ipc 方法。 基于同步的ipc方法 信号灯(semaphore),是信号量的结合,属于进程间通信的方式。
九、进程 进程概念 指一个程序的执行称为进程,是unix操作系统的根本。 程序和进程分别描述了 程序的静态形式和动态特征。 进程的衍生 进程可以用系统调用fork创建若干新的进程,前者为父进程,后者为子进程。 子进程获得父进程的 数据段、堆、栈 的副本,并与父进程共享代码段。 子进程 可以通过系统调用exec 把新的程序加载到自己的内存,原先的数据段、堆、栈以及代码段被替换掉。 此时,子进程就是那个新程序 unix/linux系统中,每个进程都有父进程,所有进程组成一个树状结构。内核启动进程作为树根负责系统的初始化,该进程的父进程是它自己。 如果进程先于子进程结束,子进程将被内核启动进程收养。 3.进程的标识 进程的描述符,内核堆进程的属性和行为记录,包括进程的优先级,状态,虚拟地址以及访问权限等。 进程描述符是一个复杂的数据结构,包含进程pid,父进程ppid。 进程pid对用户态的程序很重要,可以shell命令kill终止某个进程,或通过pid 发送信号量。 4.进程的状态 进程在操作系统中不同时刻状态不同,可运行状态,可中断的睡眠状态,不可中断的睡眠状态,暂停状态或跟踪状态,僵尸状态,退出状态。 可运行状态(task runging)R,等待进程调度器 调度 进入运行态 可中断的睡眠状态(task interruptible)S,进程正在等待某个事件(网络连接,信号灯)的发生 会进入此状态,并放入对应事件的等待队列中。当事件发生时,对应的等待队列中的进程会被唤醒。 不可中断的睡眠状态(task uninterruptible)D,与可中断的睡眠状态区别在于它不可以被打断。它在等待特殊事件,比如同步i/o操作。 暂停状态/跟踪状态(task stopped/task traced)T,向进程发送sigstop信号会使进程转入暂停状态,除非进程处于不可中断的睡眠状态,向处于暂停状态的进程发送sigcont信号会使转向可运行状态。 僵尸状态(task dead exit zombie)Z,该状态的进程将要结束,该进程的大多数进程都被收回,退出码和统计信息还未删除。 退出状态(task dead exit dead)X,此状态内核给父进程发送一个sigchld信号,分离后的
5.进程的空间 1. 用户进程生存于用户空间,不能与硬件交互。内核可以与硬件交互。用户进程不能直接访问内核空间,用户空间和内核空间 共同瓜分了内存区域。 内存区域每个单元都有地址,由指针来标识和定位。通过指针寻找内存单元的操作叫 内存寻址。 指针长度由cpu的字长决定,32位操作系统中可以寻址 2的32次方,即4GB。 这里说的地址 不是物理地址,而是虚拟地址。用户空间虚拟地址范围,0-task_size.内核空间,task_size-2的32次方。 内核与cpu会维护虚拟内存到物理内存之间的映射。 虚拟内存几乎彼此独立,互不干扰。但在物理上可能指向同一块内存。这是 ipc进程通信的共享内存 的基础。 6.系统调用 1. 内核会暴露能力接口共用户程序使用,用户进程调用这些接口叫 系统调用。 cpu在用户态下运行的用户进程不能与内核接触。当用户进程发出系统调用时,内核会把cpu从用户态切换到内核态,让cpu执行对应的内核函数。当内核函数执行完毕,内核会把cpu从内核态切换到用户态。 7.进程的切换与调度 linux操作系统通过cpu的能力,快速的在多个进程之间进行切换(进程间的上下文切换),产生多个进程在同时运行的假象。 内核把在cpu上运行的进程A换下,让cpu运行进程B。内核需要及时把进程A的状态保存,把进程B之前的状态恢复。
十、同步
计数器案例,同一个程序开俩个 进程A和进程B。并发执行 把数据库中符合条件的记录迁移到磁盘。用计数器记录 当前被处理的最大行号。 1. 第一步,读取计数器的值C 2. 第二步,从数据库中读取 C+10000 行数据。 3. 第三步, 遍历符合条件的数据,并形成新的数据集合 4. 第四步,将新的数据集合 存储到哦指定目录文件中。 5. 第五步,把计数器值+10000 6. 检查数据是否全部处理完成。是则退出,否则从第一步开始。
原子操作,把执行过程中不能被中断的操作 为原子操作。
临界区,把只能串行化访问或执行的资源或代码为 临界区。所有的系统调用都属于原子操作。
原子操作和 临界区 是不同的概念,临界区 要求 一个访问者在临界区时,其他访问者不饿能被放进来。原子操作是不能被中断。原子操作需要芯片级别的支持,当今的cpu都提供了对原子的操作。
每天1杯枸杞水坚持15天,身体会有怎样的变化?每天一杯枸杞水坚持15天,身体会有怎样的变化?健康苦行僧,开讲啦!枸杞茶只喝15天可不会有较大的改善哦,如果有的话,那可能是心理因素了,茶饮养生就是需要长久坚持的,很多老人都习惯往
怀孕期间上班还是在家休息?怀孕前面三个月时间多多注意点,满三个月宝宝也就基本上稳定了,只要注意不要剧烈运动,不要拉伸或是提重物都是影响不大的,其实孕妇也要时常运动,保持良好的心态,保持心情愉悦,坚持每天正常
孕妇睡觉的时候为什么不能平躺?对于孕妇来说,怀孕后,从饮食到生活习惯,都会发生改变。尤其是睡觉的时候,对于孕妇的睡姿也颇有讲究。那么,孕妇睡觉的时候为什么不能平躺?这是因为,平躺时妊娠子宫压迫下腔静脉和髂动脉,
如何拍摄成熟女性的美感?性感是骨感美女可望不可及的梦想。而丰满女孩只要在服饰上稍做改变,就能轻松拥有性感外形。暴露不是性感的要素,紧身低胸早已是人尽皆知的法宝,学习碧昂丝,以短外套高腰线打造S形性感女神。
做光子嫩肤会有副作用吗?光子嫩肤就是利用光热的效用,来产生临床效果的。虽然是一种非剥脱的治疗方法,正常情况下不会损伤正常的皮肤组织。但是也可能会出现副作用,主要看求美者就诊的环境设备,操作医生,术后的护理
看守所里发生何种情况,管理人员和武警可以对嫌犯开枪射击?看守所里面关押的一般是三种犯人,第一种叫做犯罪嫌疑人,这种人一般涉及到刑事犯罪,但是案件还在侦办当中,当然已经是批捕的人,有足够的证据证明跟案件有关系,所以达到批捕的条件就可以申请
上个世纪日本泡沫时代是怎样一副光景?繁荣到什么程度?上个世纪日本繁荣时期,具体到一个什么样的程度,用语言真的难以表达,一句话物质生活极大丰富。泡沫经济一般指的是1986年12月到1991年2月份,日本发生的资产价格上升,发生的一系列
痤疮毛孔粗大怎么解决?痤疮毛孔粗大怎么解决?痤疮毛孔粗大可以通过饮食休息防晒清洁等改善,也可能通过医学美容治疗来改善。毛孔粗大与痤疮脂溢性皮炎等的发生有关。解决毛孔粗大可以使用自我调整和医学美容学治疗两
没有剥削制度后,资本家和工人地位平等,他们的创造能力一样吗?没有了剥削,资本家就不存在了。19491956七年中国共产党号召领导下的社会主义改造阶段,国家实行了公私合营的政策,彻底消灭了官僚资本和买办资本,民族工商业完全走了公私合营的道路,
为什么有能力的人很多不稳定喜欢跳槽?有能力的人往往会具有更为前瞻性的眼光小到一个公司大到一个行业的未来发展,每个人都会有自己的判断,但有能力的人往往视野更宽,看得更远。很多类似的新闻见诸报端,公司的某董事从任职的公司
郑智能否重返国足?球迷呼声很高,但他具备足够的能力吗?如果球迷们希望一名41岁的老将能够进入国家队,甚至成为球队核心,那么我觉得这支国家队基本上就没什么希望了。不要说什么优秀的职业精神,不要说什么良好的技战术意识,不要说什么严格的自我