随笔分类 -  并发编程

1
摘要:一、前言 虽说用 Python编写简单的网络程序很方便,但复杂一点的网络程序还是用现成的框架比较好。这样就可以专心事务逻辑,而不是套接字的各种细节。SocketServer模块简化了编写网络服务程序的任务。同时 SocketServer模块也是 Python标准库中很多服务器框架的基础。 socke 阅读全文
posted @ 2020-07-30 18:43 zoling7 阅读(197) 评论(0) 推荐(0)
摘要:一、多路复用IO(IO multiplexing) IO multiplexing这个词可能有点陌生,但是如果我说 select/epoll,大概就都能明白了。 有些地方也称这种IO方式为事件驱动IO(event driven IO)。 我们都知道,select/epoll的好处就在于单个 proc 阅读全文
posted @ 2020-07-30 17:59 zoling7 阅读(551) 评论(0) 推荐(0)
摘要:一、阻塞IO(blocking IO) 在 linux中,默认情况下所有的 socket都是blocking,一个典型的读操作流程大概是这样: 当用户进程调用了 recvfrom这个系统调用,kernel就开始了IO的第一个阶段:准备数据。 对于 network io来说,很多时候数据在一开始还没有 阅读全文
posted @ 2020-07-30 16:16 zoling7 阅读(220) 评论(0) 推荐(0)
摘要:一、IO模型介绍 为了更好地了解 IO模型,我们回顾下:同步,异步,阻塞,非阻塞。 1,同步: # 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不会返回。 # 按照这个定义,其实绝大多数函数都是同步调用。但是一般而言,我们在说同步、异步的时候, # 特指那些需要其他部件协作或者需 阅读全文
posted @ 2020-07-30 12:19 zoling7 阅读(107) 评论(0) 推荐(0)
摘要:一、前言 本节的主题是基于单线程来实现并发,即只用一个主线程(很明显可利用的cpu只有一个)情况下实现并发,为此我们需要先回顾下并发的本质:切换+保存状态。 协程指的就是单线程下实现并发 cpu正在运行一个任务,会在两种情况下切走去执行其他的任务(切换由操作系统强制控制),一种情况是该任务发生了阻塞 阅读全文
posted @ 2020-07-30 09:56 zoling7 阅读(139) 评论(0) 推荐(0)
摘要:一、同步调用 提交任务有两种方式:同步调用,异步调用。 同步调用:提交完任务后,就在原地等待任务执行完毕,拿到结果再执行下一行代码,导致程序是串行执行。 例子:今年你们公司开年会,举办了一个吃汉堡大赛,然后把计算下大家一共吃了多少个,谁的最多,谁发的年终奖就最多。 # 1,同步调用:提交完任务后,就 阅读全文
posted @ 2020-07-29 15:36 zoling7 阅读(260) 评论(0) 推荐(0)
摘要:一、进程池与线程池 在刚开始学多进程或多线程时,我们迫不及待地基于多进程或多线程实现并发的套接字通信。 然而这种实现方式的致命缺陷是:服务的开启的进程数或线程数都会随着并发的客户端数目地增多而增多,这会对服务端主机带来巨大的压力,甚至于不堪重负而瘫痪。 于是我们必须对服务端开启的进程数或线程数加以控 阅读全文
posted @ 2020-07-29 15:16 zoling7 阅读(345) 评论(0) 推荐(0)
摘要:一、线程queue 1,定义: queue队列 :使用 import queue,用法与进程 Queue一样。 queue is especially useful in threaded programming when information must be exchanged safely b 阅读全文
posted @ 2020-07-29 12:57 zoling7 阅读(283) 评论(0) 推荐(0)
摘要:一、信号量(Semaphore) 信号量也是一把锁,可以指定信号量为5,对比互斥锁同一时间只能有一个任务抢到锁去执行,信号量同一时间可以有5个任务拿到锁去执行,如果说互斥锁是合租房屋的人去抢一个厕所,那么信号量就相当于一群路人争抢公共厕所,公共厕所有多个坑位,这意味着同一时间可以有多个人上公共厕所, 阅读全文
posted @ 2020-07-29 11:12 zoling7 阅读(227) 评论(0) 推荐(0)
摘要:一、引言 定义: ''' 定义: In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple native threads from executing Python bytecodes at 阅读全文
posted @ 2020-07-28 18:01 zoling7 阅读(143) 评论(0) 推荐(0)
摘要:一、守护线程 无论是进程还是线程,都遵循:守护xxx会等待主xxx运行完毕后被销毁。 需要强调的是:运行完毕并非终止运行。 # 1,对主进程来说,运行完毕指的是主进程代码运行完毕。 # 2,对主线程来说,运行完毕指的是主线程所在的进程内所有非守护线程统统运行完毕,主线程才算运行完毕。 详细解释: # 阅读全文
posted @ 2020-07-27 19:26 zoling7 阅读(128) 评论(0) 推荐(0)
摘要:一、Thread 对象的其他属性或方法 1,介绍: Thread实例对象的方法 # isAlive(): 返回线程是否活动的。 # getName(): 返回线程名。 # setName(): 设置线程名。 threading模块提供的一些方法: # threading.currentThread( 阅读全文
posted @ 2020-07-27 18:57 zoling7 阅读(119) 评论(0) 推荐(0)
摘要:一、谁的开启速度快? 1,在主进程下开启子进程 import time from multiprocessing import Process def say_hi(name): print('%s say hi!' % name) time.sleep(2) print('%s say hello 阅读全文
posted @ 2020-07-27 17:25 zoling7 阅读(153) 评论(0) 推荐(0)
摘要:一、threading 模块介绍 multiprocess 模块完全模仿了 threading 模块的接口,二者在使用层面上,有很大的相似性,因而不再详细介绍。 二、开启线程的两种方式 1,方式一: from threading import Thread import time def say_h 阅读全文
posted @ 2020-07-27 16:44 zoling7 阅读(313) 评论(0) 推荐(0)
摘要:一、什么是线程 在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程。 线程顾名思义,就是一条流水线工作的过程(流水线的工作需要电源,电源就相当于cpu),而一条流水线必须属于一个车间,一个车间的工作过程是一个进程,车间负责把资源整合到一起,是一个资源单位,而一个车间内至少有一条流水线 阅读全文
posted @ 2020-07-27 13:59 zoling7 阅读(118) 评论(0) 推荐(0)
摘要:一、队列介绍 进程彼此之间互相隔离,要实现进程间通信(IPC),multiprocessing 模块支持两种形式:队列和管道,这两种方式都是使用消息传递的。 1,创建队列的类(底层就是以管道和锁定的方式实现): # Queue([maxsize]):创建共享的进程队列,Queue是多进程安全的队列, 阅读全文
posted @ 2020-07-26 19:10 zoling7 阅读(544) 评论(0) 推荐(0)
摘要:一、守护进程 1,主进程创建子进程,然后将该进程设置成守护自己的进程,守护进程就好比皇帝身边的老太监,皇帝已死老太监就跟着殉葬了。 关于守护进程需要强调两点: 其一:守护进程会在主进程代码执行结束后就终止。 其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemon 阅读全文
posted @ 2020-07-26 17:32 zoling7 阅读(207) 评论(0) 推荐(0)
摘要:一、multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu\_count\(\)查看),在python中大部分情况需要使用多进程。Python提供了multiprocessing。 multiprocessing模块用来开启子 阅读全文
posted @ 2020-07-26 10:11 zoling7 阅读(681) 评论(0) 推荐(0)
摘要:一、什么是进程 1,进程: 正在进行的一个过程或者说一个任务,而负责执行任务的则是 cpu。 2,举例(单核 + 多道,实现多个进程的并发执行): 1)子系在一段时间内有很多任务要做:学 Python,听音乐,写笔记,PUBG上分。 2)但是子系同一时刻只能做一个任务(cpu 同一时间只能干一个活) 阅读全文
posted @ 2020-07-25 10:09 zoling7 阅读(198) 评论(0) 推荐(0)
摘要:一、引言 顾名思义,进程即正在执行的一个过程,进程是对正在运行程序的一个抽象。 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一。操作系统的其他所有内容都是围绕进程的概念展开的。 所以想要真正了解进程,必须实现了解操作系统。 二、为什么要有操作系统 阅读全文
posted @ 2020-07-25 09:29 zoling7 阅读(176) 评论(0) 推荐(0)

1