day38 Pyhton 并发编程】的更多相关文章

# 网络编程 # arp协议 : # 1.这是一个通过ip找mac地址的协议 # 2.由于有了socket,用户在使用网络的时候,只需要关心对方用户的ip地址就可以了 # 3.如果用户即将和这个ip进行通信,那么还需要知道它的mac地址 # 4.这个时候就需要由你的机器发起一个arp请求 # 5.由交换机进行广播 # 6.对应的机器会回应这个arp请求 # 7.通过交换机单播发给你的机器 # tcp协议和udp协议的特点? # 1.tcp # 面向连接的可靠的流式传输 适合传输比较大的文件, #…
内容回顾 socket 最底层的网络通信 所有的网络通信都是基于socket     进程 什么是进程? 是操作系统的发展过程中,为了提高cpu的利用率,在操作系统同时运行多个程序的时候,为了数据的安全\代码不混乱而创造的一个概念 每一个程序运行起来都至少是一个进程 进程是计算机中最小的资源分配单位 进程被操作系统调度的,有很多相关的算法--早期的操作系统 进程之间是数据隔离的 进程的三状态  就绪  运行  阻塞 同步异步 同步:一个任务的执行依赖另一个事务的结束 join  lock 异步:…
一.内容回顾 线程 锁 为什么有了GIL之后还需要锁 多个线程同时操作全局变量还需要锁 当出现'非原子性操作',例如+= -= *= /= l.append(l) 原子性操作 a += 1  a= a+1 tmp = a +1 a = tmp 死锁现象 什么是死锁现象 两个以上的线程争抢同一把锁 其中一个线程获取到锁之后不释放 另外的其他线程就都被锁住了 比较容易出现问题的情况: 两把锁套在一起用了 死锁现象的本质 :代码逻辑问题 递归锁 一把锁在同一个线程中acquire多次而不被阻塞 如果另…
一.内容回顾 # 线程 # 正常的编程界: # 进程 # 计算机中最小的资源分配单位 # 数据隔离 # 进程可以独立存在 # 创建与销毁 还有切换 都慢 给操作系统压力大 # 线程 # 计算机中能被CPU调度的最小单位 # 同一个进程中的多个线程资源共享 # 线程必须依赖进程存在 # 创建与销毁 还有切换 都比进程快很多 # Cpython解释器下 # GIL 全局解释器锁 # 保证了同一时刻下只有一个线程可以被CPU操作 # threading模块 # 创建子线程 Thread类 # star…
一.内容回顾 进程是计算机中最小的资源分配单位 进程与进程之间数据隔离,执行过程异步 为什么会出现进程的概念? 为了合理利用cpu,提高用户体验 多个进程是可以同时利用多个cpu的,可以实现并行的效果 僵尸进程 进程 状态码 z/z 僵尸进程   linux 在主进程中控制子进程的方法 子进程对象 = Process (target,args)  在创建的这一刻根本就没有通知操作系统 子进程对象. start()  通知操作系统,开启子进程,异步非阻塞 子进程对象.terminate() 通知操…
一.开启子进程的另一种方式 import os from multiprocessing import Process class MyProcess(Process): def __init__(self,参数): super().__init__() self.一个属性 = 参数 def run(self): print('子进程中要执行的代码') if __name__ == '__main__': conn = '一个链接' mp = MyProcess(conn) mp.start()…
一.内容回顾 并发和并行的区别 并发 宏观上是在同时运行的 微观上是一个一个顺序执行 同一时刻只有一个cpu在工作 并行 微观上就是同时执行的 同一时刻不止有一个cpu在工作 什么是进程 一个运行中的程序就是一个进程 是计算机中最小的资源分配单位 什么是同步 程序顺序执行,多个任务之间串行执行 什么是异步 多个任务同时运行 IO操作 input  输入到内存  read load recv accept recvfrom input output 从内存输出 write dump send co…
高并发,听起来高大上的一个词汇,在身处于互联网潮的社会大趋势下,高并发赋予了更多的传奇色彩.首先,我们可以看到很多招聘中,会提到有高并发项目者优先.高并发,意味着,你的前雇主,有很大的业务层面的需求,而且也能怎么你在整个项目中的一个处理逻辑的能力体现.那么,你真的知道什么是高并发吗?这不是一个很简单的话题.高并发,往往会牵扯到很多的问题,如何才能快速响应,如何处理各个线程之间的交互,如何完成逻辑之间的高负载运转,甚至,一个系统,如果没有做好前期高并发的合理配置,整个产品会遇到瓶颈,以及不可预期的…
在并发编程过程中,我们大部分的焦点都放在如何控制共享变量的访问控制上(代码层面),但是很少人会关注系统硬件及 JVM 底层相关的影响因素.前段时间学习了一个牛X的高性能异步处理框架 Disruptor,它被誉为“最快的消息框架”,其 LMAX 架构能够在一个线程里每秒处理 6百万 订单!在讲到 Disruptor 为什么这么快时,接触到了一个概念——伪共享( false sharing ),其中提到:缓存行上的写竞争是运行在 SMP 系统中并行线程实现可伸缩性最重要的限制因素.由于从代码中很难看…
在[Java并发编程实战]-–"J.U.C":CLH队列锁提过,AQS里面的CLH队列是CLH同步锁的一种变形.其主要从两方面进行了改造:节点的结构与节点等待机制.在结构上引入了头结点和尾节点,他们分别指向队列的头和尾,尝试获取锁.入队列.释放锁等实现都与头尾节点相关,并且每个节点都引入前驱节点和后后续节点的引用:在等待机制上由原来的自旋改成阻塞唤醒.其结构如下: 知道其结构了,我们再看看他的实现.在线程获取锁时会调用AQS的acquire()方法,该方法第一次尝试获取锁如果失败,会将…